{
 "cells": [
  {
   "cell_type": "markdown",
   "source": [
    "## 原始的手工计算"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%% md\n"
    }
   }
  },
  {
   "cell_type": "code",
   "source": [
    "import matplotlib.pyplot as plt\n",
    "import numpy as np\n",
    "\n",
    "\n",
    "class Linear_Regression:\n",
    "\n",
    "    # 梯度下降，更新w和b\n",
    "    def gradient_descent(self, w, b, alpha):\n",
    "        for i in range(self.m):\n",
    "            x_i = self.data[i][0]\n",
    "            y_i = self.data[i][1]\n",
    "            w -= (alpha / self.m) * (w * x_i + b - y_i) * x_i\n",
    "            b -= (alpha / self.m) * (w * x_i + b - y_i)\n",
    "        return w, b\n",
    "\n",
    "    # 计算损失值\n",
    "    def cal_loss(self, w, b):\n",
    "        # J表示总损失\n",
    "        J = 0\n",
    "        for i in range(self.m):\n",
    "            x_i = self.data[i][0]\n",
    "            y_i = self.data[i][1]\n",
    "            J += 1.0 / (2 * self.m) * pow((w * x_i + b - y_i), 2)\n",
    "        return J\n",
    "\n",
    "        # 初始化数据\n",
    "\n",
    "    def __init__(self):\n",
    "        # 读取文件a.txt中的数据,分隔符为\",\",以double格式读取数据\n",
    "        self.data = np.loadtxt('data/ex1/ex1data1.txt', delimiter=',', dtype=np.float64)\n",
    "        # m设置行数\n",
    "        self.m = self.data.shape[0]\n",
    "\n",
    "        # 数据值\n",
    "        # 一共2*2，4个图，现在画第一个图\n",
    "        plt.subplot(2, 2, 1)\n",
    "        # 显示中文标签\n",
    "        plt.rcParams[\"font.sans-serif\"] = [\"SimHei\"]\n",
    "        plt.rcParams[\"axes.unicode_minus\"] = False\n",
    "        plt.title(\"线性回归变量来预测食品卡车的利润\")  # 设置x\n",
    "        plt.xlabel(\"城市人口，单位万\")  # 设置x轴\n",
    "        plt.ylabel(\"利润，单位千\")  # 设置y轴\n",
    "        # scatter绘制散点图\n",
    "        plt.scatter(self.data[:, 0], self.data[:, 1], marker='x')\n",
    "\n",
    "    # 开始函数\n",
    "    def main(self):\n",
    "\n",
    "        alpha = 0.01  # 学习速率\n",
    "        iterations = 3000  # 梯度下降的迭代轮数\n",
    "        # 下面两个是带估计的参数值，每次需要更新一下两个值\n",
    "        w = 0.0\n",
    "        b = 0.0\n",
    "        w_all = []\n",
    "        b_all = []\n",
    "        # 为损失总函数\n",
    "        cost = []\n",
    "        print(\"-------开始计算了-----\")\n",
    "        # 计算一下损失，初始值损失\n",
    "        print(\"初始的损失值\", self.cal_loss(w, b))\n",
    "        # 大概训练3000个回合\n",
    "        for i in range(iterations):\n",
    "            w_all.append(w)\n",
    "            b_all.append(b)\n",
    "            w, b = self.gradient_descent(w, b, alpha)\n",
    "            temp = self.cal_loss(w, b)\n",
    "            cost.append(temp)\n",
    "\n",
    "        print(\"最后结果的w---\", w, \"最后结果的b---\", b)\n",
    "        x = [5.0, 22.5]\n",
    "        y = [5.0 * w + b, 22.5 * w + b]\n",
    "        plt.subplot(2, 2, 2)\n",
    "        plt.plot(x, y, color=\"red\")\n",
    "        plt.title(\"线性回归第一题\")\n",
    "        plt.xlabel(\"城市的人口数量\")\n",
    "        plt.ylabel(\"利润\")\n",
    "        plt.scatter(self.data[:, 0], self.data[:, 1], marker='x')\n",
    "\n",
    "        # print(str(cost))\n",
    "        plt.subplot(2, 2, 3)\n",
    "        plt.title(\"损失函数J\")\n",
    "        plt.xlabel(\"迭代次数\")\n",
    "        plt.ylabel(\"损失值\")\n",
    "        plt.plot(range(len(cost)), cost, color=\"red\")\n",
    "        plt.show()\n",
    "        print(\"损失值\", cost[0:100])\n",
    "        print(\"b--\", b_all[0:5])\n",
    "        print(\"w--\", w_all[0:5])\n",
    "        print(\"-------结束了-----\")\n",
    "\n",
    "\n",
    "obj = Linear_Regression()\n",
    "obj.main()"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "execution_count": 11,
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "-------开始计算了-----\n",
      "初始的损失值 32.072733877455676\n",
      "最后结果的w--- 1.148069286695327 最后结果的b--- -3.8301119455775257\n"
     ]
    },
    {
     "data": {
      "text/plain": "<Figure size 432x288 with 3 Axes>",
      "image/png": "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\n"
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "损失值 [11.544982490264898, 7.295505344783016, 6.333317200582451, 6.080648524099467, 5.999849014401003, 5.9678710706303235, 5.952224298707446, 5.9427637261758655, 5.935830688240579, 5.929975559234959, 5.924594075762858, 5.919428092186199, 5.914366065494781, 5.909359537061953, 5.904387387357645, 5.899440382146106, 5.894514461337951, 5.889607818786906, 5.884719630534954, 5.879849500751829, 5.874997220309693, 5.8701626615771305, 5.865345732571734, 5.860546356979875, 5.855764465449019, 5.850999991792482, 5.846252871335024, 5.841523040191392, 5.836810434951395, 5.832114992542229, 5.827436650167983, 5.822775345282798, 5.818131015578665, 5.8135035989797155, 5.808893033639173, 5.804299257937598, 5.799722210481662, 5.795161830103148, 5.790618055858002, 5.786090827025527, 5.7815800831075235, 5.777085763827467, 5.772607809129722, 5.768146159178674, 5.763700754357975, 5.759271535269706, 5.754858442733609, 5.750461417786248, 5.7460804016802305, 5.74171533588344, 5.737366162078202, 5.733032822160537, 5.728715258239343, 5.7244134126356485, 5.720127227881803, 5.715856646720718, 5.711601612105105, 5.707362067196676, 5.703137955365407, 5.6989292201887505, 5.6947358054509065, 5.690557655142012, 5.6863947134574495, 5.682246924797034, 5.678114233764301, 5.673996585165764, 5.669893924010134, 5.6658061955076064, 5.661733345069113, 5.6576753183055954, 5.653632061027246, 5.649603519242812, 5.645589639158845, 5.641590367178967, 5.637605649903181, 5.633635434127119, 5.629679666841325, 5.625738295230582, 5.621811266673137, 5.617898528740039, 5.614000029194403, 5.610115715990738, 5.6062455372742175, 5.602389441379968, 5.598547376832428, 5.594719292344584, 5.5909051368173355, 5.587104859338774, 5.583318409183507, 5.579545735811971, 5.575786788869757, 5.572041518186922, 5.5683098737773085, 5.564591805837891, 5.560887264748091, 5.5571962010691, 5.553518565543224, 5.549854309093219, 5.546203382821627, 5.542565738010108]\n",
      "b-- [0.0, 0.03472972179007545, 0.04581494791028907, 0.04660265162946256, 0.04290982284472679]\n",
      "w-- [0.0, 0.42608651768770256, 0.6121964649252705, 0.6937168119572512, 0.7296531844638238]\n",
      "-------结束了-----\n"
     ]
    }
   ]
  },
  {
   "cell_type": "markdown",
   "source": [
    "## 使用pytorch开始计算"
   ],
   "metadata": {
    "collapsed": false
   }
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "第 0 次 -----损失函数结果--- tensor(12.8367, dtype=torch.float64)\n",
      "第 500 次 -----损失函数结果--- tensor(9.0574, dtype=torch.float64)\n",
      "第 1000 次 -----损失函数结果--- tensor(8.9567, dtype=torch.float64)\n",
      "第 1500 次 -----损失函数结果--- tensor(8.9540, dtype=torch.float64)\n",
      "第 2000 次 -----损失函数结果--- tensor(8.9539, dtype=torch.float64)\n",
      "第 2500 次 -----损失函数结果--- tensor(8.9539, dtype=torch.float64)\n"
     ]
    },
    {
     "data": {
      "text/plain": "<Figure size 432x288 with 1 Axes>",
      "image/png": "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\n"
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "w tensor([1.1930], requires_grad=True)\n",
      "b tensor([-3.8957], requires_grad=True)\n"
     ]
    }
   ],
   "source": [
    "import torch\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "# 准备数据\n",
    "data = np.loadtxt('data/ex1/ex1data1.txt', delimiter=',', dtype=np.float64)\n",
    "# print(data)\n",
    "plt.rcParams[\"font.sans-serif\"] = [\"SimHei\"]\n",
    "plt.rcParams[\"axes.unicode_minus\"] = False\n",
    "plt.title(\"线性回归变量来预测食品卡车的利润\")  # 设置x\n",
    "plt.xlabel(\"城市人口，单位万\")  # 设置x轴\n",
    "plt.ylabel(\"利润，单位千\")  # 设置y轴\n",
    "# scatter绘制散点图\n",
    "plt.scatter(data[:, 0], data[:, 1], marker='x')\n",
    "x = torch.from_numpy(data[:, 0])\n",
    "y = torch.from_numpy(data[:, 1])\n",
    "# print(x)\n",
    "\n",
    "alpha = 0.01  # 学习速率\n",
    "iterations = 3000  # 梯度下降的迭代轮数\n",
    "# 下面两个是带估计的参数值，每次需要更新一下两个值\n",
    "w = torch.rand(1, requires_grad=True)\n",
    "b = torch.rand(1, requires_grad=True)\n",
    "\n",
    "\n",
    "def optimize(learning_rate):\n",
    "    \"\"\"\n",
    "    进行参数迭代\n",
    "    :param learning_rate:\n",
    "    :return:\n",
    "    \"\"\"\n",
    "    # print(w.grad.data,w.data,b.data)\n",
    "    w.data -= learning_rate * w.grad.data\n",
    "    b.data -= learning_rate * b.grad.data\n",
    "\n",
    "\n",
    "def loss_fn(y, y_predict):\n",
    "    \"\"\"\n",
    "    计算损失函数\n",
    "    :param y: 真实 结果\n",
    "    :param y_predict:y=wx+b计算出来的结果\n",
    "    :return:\n",
    "    \"\"\"\n",
    "\n",
    "    # 损失函数\n",
    "    loss = (y_predict - y).pow(2).mean()\n",
    "    # print(loss)\n",
    "    for i in [w, b]:\n",
    "        #每次反向传播前把梯度置为0\n",
    "        if i.grad is not None:\n",
    "            i.grad.data.zero_()\n",
    "    # [i.grad.data.zero_() for i in [w,b] if i.grad is not None]\n",
    "    loss.backward()\n",
    "    return loss.data\n",
    "\n",
    "\n",
    "for i in range(iterations):\n",
    "    #2. 计算预测值\n",
    "    y_predict = x * w + b\n",
    "\n",
    "    #3.计算损失，把参数的梯度置为0，进行反向传播\n",
    "    loss = loss_fn(y, y_predict)\n",
    "\n",
    "    if i % 500 == 0:\n",
    "        print(\"第\", i, \"次 -----损失函数结果---\", loss)\n",
    "    #4. 更新参数w和b\n",
    "    optimize(alpha)\n",
    "\n",
    "predict = x * w + b  #使用训练后的w和b计算预测值\n",
    "\n",
    "plt.scatter(x.data.numpy(), y.data.numpy(), c=\"r\")\n",
    "plt.plot(x.data.numpy(), predict.data.numpy())\n",
    "plt.show()\n",
    "\n",
    "print(\"w\", w)\n",
    "print(\"b\", b)"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  },
  {
   "cell_type": "markdown",
   "source": [
    "## pytorch内置api进行运算"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%% md\n"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "97\n",
      "Epoch[19/30000], loss: 11.652336\n",
      "Epoch[39/30000], loss: 11.573692\n",
      "Epoch[59/30000], loss: 11.536148\n",
      "Epoch[79/30000], loss: 11.499172\n",
      "Epoch[99/30000], loss: 11.462723\n",
      "Epoch[119/30000], loss: 11.426800\n",
      "Epoch[139/30000], loss: 11.391389\n",
      "Epoch[159/30000], loss: 11.356484\n",
      "Epoch[179/30000], loss: 11.322080\n",
      "Epoch[199/30000], loss: 11.288169\n",
      "Epoch[219/30000], loss: 11.254742\n",
      "Epoch[239/30000], loss: 11.221795\n",
      "Epoch[259/30000], loss: 11.189321\n",
      "Epoch[279/30000], loss: 11.157310\n",
      "Epoch[299/30000], loss: 11.125759\n",
      "Epoch[319/30000], loss: 11.094656\n",
      "Epoch[339/30000], loss: 11.064003\n",
      "Epoch[359/30000], loss: 11.033787\n",
      "Epoch[379/30000], loss: 11.004004\n",
      "Epoch[399/30000], loss: 10.974648\n",
      "Epoch[419/30000], loss: 10.945711\n",
      "Epoch[439/30000], loss: 10.917190\n",
      "Epoch[459/30000], loss: 10.889077\n",
      "Epoch[479/30000], loss: 10.861366\n",
      "Epoch[499/30000], loss: 10.834051\n",
      "Epoch[519/30000], loss: 10.807129\n",
      "Epoch[539/30000], loss: 10.780592\n",
      "Epoch[559/30000], loss: 10.754435\n",
      "Epoch[579/30000], loss: 10.728652\n",
      "Epoch[599/30000], loss: 10.703238\n",
      "Epoch[619/30000], loss: 10.678188\n",
      "Epoch[639/30000], loss: 10.653498\n",
      "Epoch[659/30000], loss: 10.629159\n",
      "Epoch[679/30000], loss: 10.605172\n",
      "Epoch[699/30000], loss: 10.581526\n",
      "Epoch[719/30000], loss: 10.558220\n",
      "Epoch[739/30000], loss: 10.535246\n",
      "Epoch[759/30000], loss: 10.512602\n",
      "Epoch[779/30000], loss: 10.490282\n",
      "Epoch[799/30000], loss: 10.468282\n",
      "Epoch[819/30000], loss: 10.446597\n",
      "Epoch[839/30000], loss: 10.425221\n",
      "Epoch[859/30000], loss: 10.404154\n",
      "Epoch[879/30000], loss: 10.383387\n",
      "Epoch[899/30000], loss: 10.362918\n",
      "Epoch[919/30000], loss: 10.342741\n",
      "Epoch[939/30000], loss: 10.322854\n",
      "Epoch[959/30000], loss: 10.303253\n",
      "Epoch[979/30000], loss: 10.283930\n",
      "Epoch[999/30000], loss: 10.264885\n",
      "Epoch[1019/30000], loss: 10.246113\n",
      "Epoch[1039/30000], loss: 10.227610\n",
      "Epoch[1059/30000], loss: 10.209371\n",
      "Epoch[1079/30000], loss: 10.191392\n",
      "Epoch[1099/30000], loss: 10.173672\n",
      "Epoch[1119/30000], loss: 10.156206\n",
      "Epoch[1139/30000], loss: 10.138990\n",
      "Epoch[1159/30000], loss: 10.122021\n",
      "Epoch[1179/30000], loss: 10.105294\n",
      "Epoch[1199/30000], loss: 10.088805\n",
      "Epoch[1219/30000], loss: 10.072555\n",
      "Epoch[1239/30000], loss: 10.056537\n",
      "Epoch[1259/30000], loss: 10.040748\n",
      "Epoch[1279/30000], loss: 10.025185\n",
      "Epoch[1299/30000], loss: 10.009845\n",
      "Epoch[1319/30000], loss: 9.994724\n",
      "Epoch[1339/30000], loss: 9.979822\n",
      "Epoch[1359/30000], loss: 9.965130\n",
      "Epoch[1379/30000], loss: 9.950649\n",
      "Epoch[1399/30000], loss: 9.936377\n",
      "Epoch[1419/30000], loss: 9.922309\n",
      "Epoch[1439/30000], loss: 9.908442\n",
      "Epoch[1459/30000], loss: 9.894774\n",
      "Epoch[1479/30000], loss: 9.881302\n",
      "Epoch[1499/30000], loss: 9.868023\n",
      "Epoch[1519/30000], loss: 9.854934\n",
      "Epoch[1539/30000], loss: 9.842031\n",
      "Epoch[1559/30000], loss: 9.829314\n",
      "Epoch[1579/30000], loss: 9.816779\n",
      "Epoch[1599/30000], loss: 9.804424\n",
      "Epoch[1619/30000], loss: 9.792245\n",
      "Epoch[1639/30000], loss: 9.780239\n",
      "Epoch[1659/30000], loss: 9.768407\n",
      "Epoch[1679/30000], loss: 9.756744\n",
      "Epoch[1699/30000], loss: 9.745248\n",
      "Epoch[1719/30000], loss: 9.733916\n",
      "Epoch[1739/30000], loss: 9.722748\n",
      "Epoch[1759/30000], loss: 9.711740\n",
      "Epoch[1779/30000], loss: 9.700887\n",
      "Epoch[1799/30000], loss: 9.690190\n",
      "Epoch[1819/30000], loss: 9.679648\n",
      "Epoch[1839/30000], loss: 9.669256\n",
      "Epoch[1859/30000], loss: 9.659014\n",
      "Epoch[1879/30000], loss: 9.648917\n",
      "Epoch[1899/30000], loss: 9.638964\n",
      "Epoch[1919/30000], loss: 9.629155\n",
      "Epoch[1939/30000], loss: 9.619486\n",
      "Epoch[1959/30000], loss: 9.609955\n",
      "Epoch[1979/30000], loss: 9.600561\n",
      "Epoch[1999/30000], loss: 9.591302\n",
      "Epoch[2019/30000], loss: 9.582174\n",
      "Epoch[2039/30000], loss: 9.573178\n",
      "Epoch[2059/30000], loss: 9.564308\n",
      "Epoch[2079/30000], loss: 9.555567\n",
      "Epoch[2099/30000], loss: 9.546951\n",
      "Epoch[2119/30000], loss: 9.538460\n",
      "Epoch[2139/30000], loss: 9.530090\n",
      "Epoch[2159/30000], loss: 9.521840\n",
      "Epoch[2179/30000], loss: 9.513708\n",
      "Epoch[2199/30000], loss: 9.505692\n",
      "Epoch[2219/30000], loss: 9.497790\n",
      "Epoch[2239/30000], loss: 9.490005\n",
      "Epoch[2259/30000], loss: 9.482327\n",
      "Epoch[2279/30000], loss: 9.474760\n",
      "Epoch[2299/30000], loss: 9.467302\n",
      "Epoch[2319/30000], loss: 9.459950\n",
      "Epoch[2339/30000], loss: 9.452704\n",
      "Epoch[2359/30000], loss: 9.445563\n",
      "Epoch[2379/30000], loss: 9.438523\n",
      "Epoch[2399/30000], loss: 9.431583\n",
      "Epoch[2419/30000], loss: 9.424745\n",
      "Epoch[2439/30000], loss: 9.418002\n",
      "Epoch[2459/30000], loss: 9.411357\n",
      "Epoch[2479/30000], loss: 9.404807\n",
      "Epoch[2499/30000], loss: 9.398350\n",
      "Epoch[2519/30000], loss: 9.391987\n",
      "Epoch[2539/30000], loss: 9.385714\n",
      "Epoch[2559/30000], loss: 9.379531\n",
      "Epoch[2579/30000], loss: 9.373437\n",
      "Epoch[2599/30000], loss: 9.367430\n",
      "Epoch[2619/30000], loss: 9.361506\n",
      "Epoch[2639/30000], loss: 9.355673\n",
      "Epoch[2659/30000], loss: 9.349918\n",
      "Epoch[2679/30000], loss: 9.344250\n",
      "Epoch[2699/30000], loss: 9.338659\n",
      "Epoch[2719/30000], loss: 9.333151\n",
      "Epoch[2739/30000], loss: 9.327720\n",
      "Epoch[2759/30000], loss: 9.322368\n",
      "Epoch[2779/30000], loss: 9.317092\n",
      "Epoch[2799/30000], loss: 9.311892\n",
      "Epoch[2819/30000], loss: 9.306766\n",
      "Epoch[2839/30000], loss: 9.301715\n",
      "Epoch[2859/30000], loss: 9.296733\n",
      "Epoch[2879/30000], loss: 9.291824\n",
      "Epoch[2899/30000], loss: 9.286985\n",
      "Epoch[2919/30000], loss: 9.282217\n",
      "Epoch[2939/30000], loss: 9.277515\n",
      "Epoch[2959/30000], loss: 9.272882\n",
      "Epoch[2979/30000], loss: 9.268315\n",
      "Epoch[2999/30000], loss: 9.263814\n",
      "Epoch[3019/30000], loss: 9.259377\n",
      "Epoch[3039/30000], loss: 9.255003\n",
      "Epoch[3059/30000], loss: 9.250691\n",
      "Epoch[3079/30000], loss: 9.246443\n",
      "Epoch[3099/30000], loss: 9.242253\n",
      "Epoch[3119/30000], loss: 9.238125\n",
      "Epoch[3139/30000], loss: 9.234056\n",
      "Epoch[3159/30000], loss: 9.230045\n",
      "Epoch[3179/30000], loss: 9.226089\n",
      "Epoch[3199/30000], loss: 9.222195\n",
      "Epoch[3219/30000], loss: 9.218352\n",
      "Epoch[3239/30000], loss: 9.214566\n",
      "Epoch[3259/30000], loss: 9.210834\n",
      "Epoch[3279/30000], loss: 9.207154\n",
      "Epoch[3299/30000], loss: 9.203530\n",
      "Epoch[3319/30000], loss: 9.199957\n",
      "Epoch[3339/30000], loss: 9.196432\n",
      "Epoch[3359/30000], loss: 9.192961\n",
      "Epoch[3379/30000], loss: 9.189537\n",
      "Epoch[3399/30000], loss: 9.186164\n",
      "Epoch[3419/30000], loss: 9.182838\n",
      "Epoch[3439/30000], loss: 9.179562\n",
      "Epoch[3459/30000], loss: 9.176330\n",
      "Epoch[3479/30000], loss: 9.173145\n",
      "Epoch[3499/30000], loss: 9.170006\n",
      "Epoch[3519/30000], loss: 9.166912\n",
      "Epoch[3539/30000], loss: 9.163862\n",
      "Epoch[3559/30000], loss: 9.160856\n",
      "Epoch[3579/30000], loss: 9.157893\n",
      "Epoch[3599/30000], loss: 9.154973\n",
      "Epoch[3619/30000], loss: 9.152095\n",
      "Epoch[3639/30000], loss: 9.149257\n",
      "Epoch[3659/30000], loss: 9.146460\n",
      "Epoch[3679/30000], loss: 9.143703\n",
      "Epoch[3699/30000], loss: 9.140985\n",
      "Epoch[3719/30000], loss: 9.138309\n",
      "Epoch[3739/30000], loss: 9.135666\n",
      "Epoch[3759/30000], loss: 9.133065\n",
      "Epoch[3779/30000], loss: 9.130500\n",
      "Epoch[3799/30000], loss: 9.127972\n",
      "Epoch[3819/30000], loss: 9.125480\n",
      "Epoch[3839/30000], loss: 9.123024\n",
      "Epoch[3859/30000], loss: 9.120601\n",
      "Epoch[3879/30000], loss: 9.118215\n",
      "Epoch[3899/30000], loss: 9.115863\n",
      "Epoch[3919/30000], loss: 9.113544\n",
      "Epoch[3939/30000], loss: 9.111259\n",
      "Epoch[3959/30000], loss: 9.109006\n",
      "Epoch[3979/30000], loss: 9.106786\n",
      "Epoch[3999/30000], loss: 9.104598\n",
      "Epoch[4019/30000], loss: 9.102441\n",
      "Epoch[4039/30000], loss: 9.100314\n",
      "Epoch[4059/30000], loss: 9.098218\n",
      "Epoch[4079/30000], loss: 9.096151\n",
      "Epoch[4099/30000], loss: 9.094115\n",
      "Epoch[4119/30000], loss: 9.092109\n",
      "Epoch[4139/30000], loss: 9.090130\n",
      "Epoch[4159/30000], loss: 9.088180\n",
      "Epoch[4179/30000], loss: 9.086258\n",
      "Epoch[4199/30000], loss: 9.084362\n",
      "Epoch[4219/30000], loss: 9.082495\n",
      "Epoch[4239/30000], loss: 9.080654\n",
      "Epoch[4259/30000], loss: 9.078839\n",
      "Epoch[4279/30000], loss: 9.077051\n",
      "Epoch[4299/30000], loss: 9.075289\n",
      "Epoch[4319/30000], loss: 9.073551\n",
      "Epoch[4339/30000], loss: 9.071837\n",
      "Epoch[4359/30000], loss: 9.070148\n",
      "Epoch[4379/30000], loss: 9.068485\n",
      "Epoch[4399/30000], loss: 9.066846\n",
      "Epoch[4419/30000], loss: 9.065228\n",
      "Epoch[4439/30000], loss: 9.063635\n",
      "Epoch[4459/30000], loss: 9.062064\n",
      "Epoch[4479/30000], loss: 9.060515\n",
      "Epoch[4499/30000], loss: 9.058990\n",
      "Epoch[4519/30000], loss: 9.057487\n",
      "Epoch[4539/30000], loss: 9.056004\n",
      "Epoch[4559/30000], loss: 9.054543\n",
      "Epoch[4579/30000], loss: 9.053101\n",
      "Epoch[4599/30000], loss: 9.051681\n",
      "Epoch[4619/30000], loss: 9.050282\n",
      "Epoch[4639/30000], loss: 9.048903\n",
      "Epoch[4659/30000], loss: 9.047542\n",
      "Epoch[4679/30000], loss: 9.046201\n",
      "Epoch[4699/30000], loss: 9.044881\n",
      "Epoch[4719/30000], loss: 9.043578\n",
      "Epoch[4739/30000], loss: 9.042295\n",
      "Epoch[4759/30000], loss: 9.041030\n",
      "Epoch[4779/30000], loss: 9.039783\n",
      "Epoch[4799/30000], loss: 9.038552\n",
      "Epoch[4819/30000], loss: 9.037342\n",
      "Epoch[4839/30000], loss: 9.036147\n",
      "Epoch[4859/30000], loss: 9.034970\n",
      "Epoch[4879/30000], loss: 9.033809\n",
      "Epoch[4899/30000], loss: 9.032666\n",
      "Epoch[4919/30000], loss: 9.031540\n",
      "Epoch[4939/30000], loss: 9.030428\n",
      "Epoch[4959/30000], loss: 9.029332\n",
      "Epoch[4979/30000], loss: 9.028253\n",
      "Epoch[4999/30000], loss: 9.027189\n",
      "Epoch[5019/30000], loss: 9.026140\n",
      "Epoch[5039/30000], loss: 9.025106\n",
      "Epoch[5059/30000], loss: 9.024087\n",
      "Epoch[5079/30000], loss: 9.023083\n",
      "Epoch[5099/30000], loss: 9.022094\n",
      "Epoch[5119/30000], loss: 9.021117\n",
      "Epoch[5139/30000], loss: 9.020155\n",
      "Epoch[5159/30000], loss: 9.019207\n",
      "Epoch[5179/30000], loss: 9.018272\n",
      "Epoch[5199/30000], loss: 9.017351\n",
      "Epoch[5219/30000], loss: 9.016443\n",
      "Epoch[5239/30000], loss: 9.015549\n",
      "Epoch[5259/30000], loss: 9.014666\n",
      "Epoch[5279/30000], loss: 9.013797\n",
      "Epoch[5299/30000], loss: 9.012940\n",
      "Epoch[5319/30000], loss: 9.012094\n",
      "Epoch[5339/30000], loss: 9.011261\n",
      "Epoch[5359/30000], loss: 9.010441\n",
      "Epoch[5379/30000], loss: 9.009632\n",
      "Epoch[5399/30000], loss: 9.008834\n",
      "Epoch[5419/30000], loss: 9.008048\n",
      "Epoch[5439/30000], loss: 9.007275\n",
      "Epoch[5459/30000], loss: 9.006510\n",
      "Epoch[5479/30000], loss: 9.005756\n",
      "Epoch[5499/30000], loss: 9.005015\n",
      "Epoch[5519/30000], loss: 9.004285\n",
      "Epoch[5539/30000], loss: 9.003562\n",
      "Epoch[5559/30000], loss: 9.002852\n",
      "Epoch[5579/30000], loss: 9.002151\n",
      "Epoch[5599/30000], loss: 9.001461\n",
      "Epoch[5619/30000], loss: 9.000781\n",
      "Epoch[5639/30000], loss: 9.000110\n",
      "Epoch[5659/30000], loss: 8.999450\n",
      "Epoch[5679/30000], loss: 8.998797\n",
      "Epoch[5699/30000], loss: 8.998156\n",
      "Epoch[5719/30000], loss: 8.997521\n",
      "Epoch[5739/30000], loss: 8.996898\n",
      "Epoch[5759/30000], loss: 8.996283\n",
      "Epoch[5779/30000], loss: 8.995677\n",
      "Epoch[5799/30000], loss: 8.995078\n",
      "Epoch[5819/30000], loss: 8.994492\n",
      "Epoch[5839/30000], loss: 8.993909\n",
      "Epoch[5859/30000], loss: 8.993337\n",
      "Epoch[5879/30000], loss: 8.992773\n",
      "Epoch[5899/30000], loss: 8.992216\n",
      "Epoch[5919/30000], loss: 8.991670\n",
      "Epoch[5939/30000], loss: 8.991129\n",
      "Epoch[5959/30000], loss: 8.990596\n",
      "Epoch[5979/30000], loss: 8.990071\n",
      "Epoch[5999/30000], loss: 8.989554\n",
      "Epoch[6019/30000], loss: 8.989044\n",
      "Epoch[6039/30000], loss: 8.988542\n",
      "Epoch[6059/30000], loss: 8.988046\n",
      "Epoch[6079/30000], loss: 8.987557\n",
      "Epoch[6099/30000], loss: 8.987076\n",
      "Epoch[6119/30000], loss: 8.986601\n",
      "Epoch[6139/30000], loss: 8.986134\n",
      "Epoch[6159/30000], loss: 8.985673\n",
      "Epoch[6179/30000], loss: 8.985219\n",
      "Epoch[6199/30000], loss: 8.984772\n",
      "Epoch[6219/30000], loss: 8.984329\n",
      "Epoch[6239/30000], loss: 8.983893\n",
      "Epoch[6259/30000], loss: 8.983464\n",
      "Epoch[6279/30000], loss: 8.983043\n",
      "Epoch[6299/30000], loss: 8.982625\n",
      "Epoch[6319/30000], loss: 8.982215\n",
      "Epoch[6339/30000], loss: 8.981811\n",
      "Epoch[6359/30000], loss: 8.981411\n",
      "Epoch[6379/30000], loss: 8.981019\n",
      "Epoch[6399/30000], loss: 8.980631\n",
      "Epoch[6419/30000], loss: 8.980247\n",
      "Epoch[6439/30000], loss: 8.979871\n",
      "Epoch[6459/30000], loss: 8.979501\n",
      "Epoch[6479/30000], loss: 8.979135\n",
      "Epoch[6499/30000], loss: 8.978773\n",
      "Epoch[6519/30000], loss: 8.978418\n",
      "Epoch[6539/30000], loss: 8.978066\n",
      "Epoch[6559/30000], loss: 8.977721\n",
      "Epoch[6579/30000], loss: 8.977381\n",
      "Epoch[6599/30000], loss: 8.977046\n",
      "Epoch[6619/30000], loss: 8.976715\n",
      "Epoch[6639/30000], loss: 8.976389\n",
      "Epoch[6659/30000], loss: 8.976068\n",
      "Epoch[6679/30000], loss: 8.975750\n",
      "Epoch[6699/30000], loss: 8.975438\n",
      "Epoch[6719/30000], loss: 8.975130\n",
      "Epoch[6739/30000], loss: 8.974827\n",
      "Epoch[6759/30000], loss: 8.974527\n",
      "Epoch[6779/30000], loss: 8.974234\n",
      "Epoch[6799/30000], loss: 8.973943\n",
      "Epoch[6819/30000], loss: 8.973656\n",
      "Epoch[6839/30000], loss: 8.973373\n",
      "Epoch[6859/30000], loss: 8.973096\n",
      "Epoch[6879/30000], loss: 8.972821\n",
      "Epoch[6899/30000], loss: 8.972551\n",
      "Epoch[6919/30000], loss: 8.972283\n",
      "Epoch[6939/30000], loss: 8.972021\n",
      "Epoch[6959/30000], loss: 8.971764\n",
      "Epoch[6979/30000], loss: 8.971508\n",
      "Epoch[6999/30000], loss: 8.971255\n",
      "Epoch[7019/30000], loss: 8.971007\n",
      "Epoch[7039/30000], loss: 8.970764\n",
      "Epoch[7059/30000], loss: 8.970523\n",
      "Epoch[7079/30000], loss: 8.970286\n",
      "Epoch[7099/30000], loss: 8.970051\n",
      "Epoch[7119/30000], loss: 8.969822\n",
      "Epoch[7139/30000], loss: 8.969593\n",
      "Epoch[7159/30000], loss: 8.969369\n",
      "Epoch[7179/30000], loss: 8.969148\n",
      "Epoch[7199/30000], loss: 8.968931\n",
      "Epoch[7219/30000], loss: 8.968716\n",
      "Epoch[7239/30000], loss: 8.968505\n",
      "Epoch[7259/30000], loss: 8.968296\n",
      "Epoch[7279/30000], loss: 8.968089\n",
      "Epoch[7299/30000], loss: 8.967888\n",
      "Epoch[7319/30000], loss: 8.967690\n",
      "Epoch[7339/30000], loss: 8.967491\n",
      "Epoch[7359/30000], loss: 8.967298\n",
      "Epoch[7379/30000], loss: 8.967107\n",
      "Epoch[7399/30000], loss: 8.966916\n",
      "Epoch[7419/30000], loss: 8.966732\n",
      "Epoch[7439/30000], loss: 8.966548\n",
      "Epoch[7459/30000], loss: 8.966367\n",
      "Epoch[7479/30000], loss: 8.966190\n",
      "Epoch[7499/30000], loss: 8.966015\n",
      "Epoch[7519/30000], loss: 8.965842\n",
      "Epoch[7539/30000], loss: 8.965672\n",
      "Epoch[7559/30000], loss: 8.965505\n",
      "Epoch[7579/30000], loss: 8.965339\n",
      "Epoch[7599/30000], loss: 8.965176\n",
      "Epoch[7619/30000], loss: 8.965014\n",
      "Epoch[7639/30000], loss: 8.964856\n",
      "Epoch[7659/30000], loss: 8.964700\n",
      "Epoch[7679/30000], loss: 8.964545\n",
      "Epoch[7699/30000], loss: 8.964394\n",
      "Epoch[7719/30000], loss: 8.964245\n",
      "Epoch[7739/30000], loss: 8.964097\n",
      "Epoch[7759/30000], loss: 8.963950\n",
      "Epoch[7779/30000], loss: 8.963807\n",
      "Epoch[7799/30000], loss: 8.963667\n",
      "Epoch[7819/30000], loss: 8.963526\n",
      "Epoch[7839/30000], loss: 8.963389\n",
      "Epoch[7859/30000], loss: 8.963254\n",
      "Epoch[7879/30000], loss: 8.963120\n",
      "Epoch[7899/30000], loss: 8.962990\n",
      "Epoch[7919/30000], loss: 8.962859\n",
      "Epoch[7939/30000], loss: 8.962732\n",
      "Epoch[7959/30000], loss: 8.962607\n",
      "Epoch[7979/30000], loss: 8.962482\n",
      "Epoch[7999/30000], loss: 8.962360\n",
      "Epoch[8019/30000], loss: 8.962239\n",
      "Epoch[8039/30000], loss: 8.962120\n",
      "Epoch[8059/30000], loss: 8.962004\n",
      "Epoch[8079/30000], loss: 8.961888\n",
      "Epoch[8099/30000], loss: 8.961775\n",
      "Epoch[8119/30000], loss: 8.961661\n",
      "Epoch[8139/30000], loss: 8.961552\n",
      "Epoch[8159/30000], loss: 8.961443\n",
      "Epoch[8179/30000], loss: 8.961335\n",
      "Epoch[8199/30000], loss: 8.961230\n",
      "Epoch[8219/30000], loss: 8.961125\n",
      "Epoch[8239/30000], loss: 8.961023\n",
      "Epoch[8259/30000], loss: 8.960922\n",
      "Epoch[8279/30000], loss: 8.960822\n",
      "Epoch[8299/30000], loss: 8.960722\n",
      "Epoch[8319/30000], loss: 8.960626\n",
      "Epoch[8339/30000], loss: 8.960529\n",
      "Epoch[8359/30000], loss: 8.960436\n",
      "Epoch[8379/30000], loss: 8.960342\n",
      "Epoch[8399/30000], loss: 8.960252\n",
      "Epoch[8419/30000], loss: 8.960159\n",
      "Epoch[8439/30000], loss: 8.960071\n",
      "Epoch[8459/30000], loss: 8.959984\n",
      "Epoch[8479/30000], loss: 8.959897\n",
      "Epoch[8499/30000], loss: 8.959811\n",
      "Epoch[8519/30000], loss: 8.959727\n",
      "Epoch[8539/30000], loss: 8.959643\n",
      "Epoch[8559/30000], loss: 8.959563\n",
      "Epoch[8579/30000], loss: 8.959483\n",
      "Epoch[8599/30000], loss: 8.959404\n",
      "Epoch[8619/30000], loss: 8.959326\n",
      "Epoch[8639/30000], loss: 8.959248\n",
      "Epoch[8659/30000], loss: 8.959172\n",
      "Epoch[8679/30000], loss: 8.959098\n",
      "Epoch[8699/30000], loss: 8.959023\n",
      "Epoch[8719/30000], loss: 8.958951\n",
      "Epoch[8739/30000], loss: 8.958878\n",
      "Epoch[8759/30000], loss: 8.958808\n",
      "Epoch[8779/30000], loss: 8.958738\n",
      "Epoch[8799/30000], loss: 8.958671\n",
      "Epoch[8819/30000], loss: 8.958603\n",
      "Epoch[8839/30000], loss: 8.958536\n",
      "Epoch[8859/30000], loss: 8.958469\n",
      "Epoch[8879/30000], loss: 8.958405\n",
      "Epoch[8899/30000], loss: 8.958342\n",
      "Epoch[8919/30000], loss: 8.958279\n",
      "Epoch[8939/30000], loss: 8.958216\n",
      "Epoch[8959/30000], loss: 8.958155\n",
      "Epoch[8979/30000], loss: 8.958094\n",
      "Epoch[8999/30000], loss: 8.958035\n",
      "Epoch[9019/30000], loss: 8.957976\n",
      "Epoch[9039/30000], loss: 8.957918\n",
      "Epoch[9059/30000], loss: 8.957863\n",
      "Epoch[9079/30000], loss: 8.957807\n",
      "Epoch[9099/30000], loss: 8.957750\n",
      "Epoch[9119/30000], loss: 8.957696\n",
      "Epoch[9139/30000], loss: 8.957642\n",
      "Epoch[9159/30000], loss: 8.957589\n",
      "Epoch[9179/30000], loss: 8.957538\n",
      "Epoch[9199/30000], loss: 8.957485\n",
      "Epoch[9219/30000], loss: 8.957436\n",
      "Epoch[9239/30000], loss: 8.957384\n",
      "Epoch[9259/30000], loss: 8.957334\n",
      "Epoch[9279/30000], loss: 8.957287\n",
      "Epoch[9299/30000], loss: 8.957239\n",
      "Epoch[9319/30000], loss: 8.957193\n",
      "Epoch[9339/30000], loss: 8.957145\n",
      "Epoch[9359/30000], loss: 8.957099\n",
      "Epoch[9379/30000], loss: 8.957054\n",
      "Epoch[9399/30000], loss: 8.957010\n",
      "Epoch[9419/30000], loss: 8.956965\n",
      "Epoch[9439/30000], loss: 8.956923\n",
      "Epoch[9459/30000], loss: 8.956878\n",
      "Epoch[9479/30000], loss: 8.956837\n",
      "Epoch[9499/30000], loss: 8.956797\n",
      "Epoch[9519/30000], loss: 8.956755\n",
      "Epoch[9539/30000], loss: 8.956716\n",
      "Epoch[9559/30000], loss: 8.956676\n",
      "Epoch[9579/30000], loss: 8.956636\n",
      "Epoch[9599/30000], loss: 8.956597\n",
      "Epoch[9619/30000], loss: 8.956559\n",
      "Epoch[9639/30000], loss: 8.956522\n",
      "Epoch[9659/30000], loss: 8.956486\n",
      "Epoch[9679/30000], loss: 8.956450\n",
      "Epoch[9699/30000], loss: 8.956412\n",
      "Epoch[9719/30000], loss: 8.956377\n",
      "Epoch[9739/30000], loss: 8.956343\n",
      "Epoch[9759/30000], loss: 8.956309\n",
      "Epoch[9779/30000], loss: 8.956274\n",
      "Epoch[9799/30000], loss: 8.956241\n",
      "Epoch[9819/30000], loss: 8.956207\n",
      "Epoch[9839/30000], loss: 8.956176\n",
      "Epoch[9859/30000], loss: 8.956142\n",
      "Epoch[9879/30000], loss: 8.956112\n",
      "Epoch[9899/30000], loss: 8.956081\n",
      "Epoch[9919/30000], loss: 8.956051\n",
      "Epoch[9939/30000], loss: 8.956020\n",
      "Epoch[9959/30000], loss: 8.955991\n",
      "Epoch[9979/30000], loss: 8.955962\n",
      "Epoch[9999/30000], loss: 8.955933\n",
      "Epoch[10019/30000], loss: 8.955903\n",
      "Epoch[10039/30000], loss: 8.955874\n",
      "Epoch[10059/30000], loss: 8.955849\n",
      "Epoch[10079/30000], loss: 8.955821\n",
      "Epoch[10099/30000], loss: 8.955793\n",
      "Epoch[10119/30000], loss: 8.955768\n",
      "Epoch[10139/30000], loss: 8.955741\n",
      "Epoch[10159/30000], loss: 8.955715\n",
      "Epoch[10179/30000], loss: 8.955689\n",
      "Epoch[10199/30000], loss: 8.955665\n",
      "Epoch[10219/30000], loss: 8.955641\n",
      "Epoch[10239/30000], loss: 8.955617\n",
      "Epoch[10259/30000], loss: 8.955591\n",
      "Epoch[10279/30000], loss: 8.955568\n",
      "Epoch[10299/30000], loss: 8.955545\n",
      "Epoch[10319/30000], loss: 8.955522\n",
      "Epoch[10339/30000], loss: 8.955500\n",
      "Epoch[10359/30000], loss: 8.955477\n",
      "Epoch[10379/30000], loss: 8.955456\n",
      "Epoch[10399/30000], loss: 8.955433\n",
      "Epoch[10419/30000], loss: 8.955413\n",
      "Epoch[10439/30000], loss: 8.955392\n",
      "Epoch[10459/30000], loss: 8.955371\n",
      "Epoch[10479/30000], loss: 8.955350\n",
      "Epoch[10499/30000], loss: 8.955330\n",
      "Epoch[10519/30000], loss: 8.955310\n",
      "Epoch[10539/30000], loss: 8.955290\n",
      "Epoch[10559/30000], loss: 8.955272\n",
      "Epoch[10579/30000], loss: 8.955253\n",
      "Epoch[10599/30000], loss: 8.955233\n",
      "Epoch[10619/30000], loss: 8.955215\n",
      "Epoch[10639/30000], loss: 8.955196\n",
      "Epoch[10659/30000], loss: 8.955179\n",
      "Epoch[10679/30000], loss: 8.955162\n",
      "Epoch[10699/30000], loss: 8.955144\n",
      "Epoch[10719/30000], loss: 8.955127\n",
      "Epoch[10739/30000], loss: 8.955110\n",
      "Epoch[10759/30000], loss: 8.955092\n",
      "Epoch[10779/30000], loss: 8.955076\n",
      "Epoch[10799/30000], loss: 8.955061\n",
      "Epoch[10819/30000], loss: 8.955044\n",
      "Epoch[10839/30000], loss: 8.955028\n",
      "Epoch[10859/30000], loss: 8.955012\n",
      "Epoch[10879/30000], loss: 8.954999\n",
      "Epoch[10899/30000], loss: 8.954983\n",
      "Epoch[10919/30000], loss: 8.954967\n",
      "Epoch[10939/30000], loss: 8.954953\n",
      "Epoch[10959/30000], loss: 8.954939\n",
      "Epoch[10979/30000], loss: 8.954924\n",
      "Epoch[10999/30000], loss: 8.954909\n",
      "Epoch[11019/30000], loss: 8.954896\n",
      "Epoch[11039/30000], loss: 8.954883\n",
      "Epoch[11059/30000], loss: 8.954869\n",
      "Epoch[11079/30000], loss: 8.954855\n",
      "Epoch[11099/30000], loss: 8.954843\n",
      "Epoch[11119/30000], loss: 8.954829\n",
      "Epoch[11139/30000], loss: 8.954817\n",
      "Epoch[11159/30000], loss: 8.954804\n",
      "Epoch[11179/30000], loss: 8.954791\n",
      "Epoch[11199/30000], loss: 8.954780\n",
      "Epoch[11219/30000], loss: 8.954768\n",
      "Epoch[11239/30000], loss: 8.954756\n",
      "Epoch[11259/30000], loss: 8.954744\n",
      "Epoch[11279/30000], loss: 8.954733\n",
      "Epoch[11299/30000], loss: 8.954720\n",
      "Epoch[11319/30000], loss: 8.954710\n",
      "Epoch[11339/30000], loss: 8.954699\n",
      "Epoch[11359/30000], loss: 8.954688\n",
      "Epoch[11379/30000], loss: 8.954678\n",
      "Epoch[11399/30000], loss: 8.954666\n",
      "Epoch[11419/30000], loss: 8.954658\n",
      "Epoch[11439/30000], loss: 8.954647\n",
      "Epoch[11459/30000], loss: 8.954638\n",
      "Epoch[11479/30000], loss: 8.954628\n",
      "Epoch[11499/30000], loss: 8.954617\n",
      "Epoch[11519/30000], loss: 8.954607\n",
      "Epoch[11539/30000], loss: 8.954597\n",
      "Epoch[11559/30000], loss: 8.954587\n",
      "Epoch[11579/30000], loss: 8.954579\n",
      "Epoch[11599/30000], loss: 8.954571\n",
      "Epoch[11619/30000], loss: 8.954561\n",
      "Epoch[11639/30000], loss: 8.954553\n",
      "Epoch[11659/30000], loss: 8.954544\n",
      "Epoch[11679/30000], loss: 8.954535\n",
      "Epoch[11699/30000], loss: 8.954526\n",
      "Epoch[11719/30000], loss: 8.954518\n",
      "Epoch[11739/30000], loss: 8.954510\n",
      "Epoch[11759/30000], loss: 8.954501\n",
      "Epoch[11779/30000], loss: 8.954494\n",
      "Epoch[11799/30000], loss: 8.954486\n",
      "Epoch[11819/30000], loss: 8.954478\n",
      "Epoch[11839/30000], loss: 8.954471\n",
      "Epoch[11859/30000], loss: 8.954462\n",
      "Epoch[11879/30000], loss: 8.954453\n",
      "Epoch[11899/30000], loss: 8.954449\n",
      "Epoch[11919/30000], loss: 8.954441\n",
      "Epoch[11939/30000], loss: 8.954433\n",
      "Epoch[11959/30000], loss: 8.954427\n",
      "Epoch[11979/30000], loss: 8.954419\n",
      "Epoch[11999/30000], loss: 8.954412\n",
      "Epoch[12019/30000], loss: 8.954405\n",
      "Epoch[12039/30000], loss: 8.954399\n",
      "Epoch[12059/30000], loss: 8.954392\n",
      "Epoch[12079/30000], loss: 8.954387\n",
      "Epoch[12099/30000], loss: 8.954380\n",
      "Epoch[12119/30000], loss: 8.954373\n",
      "Epoch[12139/30000], loss: 8.954367\n",
      "Epoch[12159/30000], loss: 8.954361\n",
      "Epoch[12179/30000], loss: 8.954355\n",
      "Epoch[12199/30000], loss: 8.954350\n",
      "Epoch[12219/30000], loss: 8.954343\n",
      "Epoch[12239/30000], loss: 8.954338\n",
      "Epoch[12259/30000], loss: 8.954333\n",
      "Epoch[12279/30000], loss: 8.954327\n",
      "Epoch[12299/30000], loss: 8.954322\n",
      "Epoch[12319/30000], loss: 8.954315\n",
      "Epoch[12339/30000], loss: 8.954310\n",
      "Epoch[12359/30000], loss: 8.954306\n",
      "Epoch[12379/30000], loss: 8.954300\n",
      "Epoch[12399/30000], loss: 8.954294\n",
      "Epoch[12419/30000], loss: 8.954289\n",
      "Epoch[12439/30000], loss: 8.954286\n",
      "Epoch[12459/30000], loss: 8.954280\n",
      "Epoch[12479/30000], loss: 8.954275\n",
      "Epoch[12499/30000], loss: 8.954269\n",
      "Epoch[12519/30000], loss: 8.954266\n",
      "Epoch[12539/30000], loss: 8.954262\n",
      "Epoch[12559/30000], loss: 8.954256\n",
      "Epoch[12579/30000], loss: 8.954252\n",
      "Epoch[12599/30000], loss: 8.954247\n",
      "Epoch[12619/30000], loss: 8.954243\n",
      "Epoch[12639/30000], loss: 8.954240\n",
      "Epoch[12659/30000], loss: 8.954234\n",
      "Epoch[12679/30000], loss: 8.954229\n",
      "Epoch[12699/30000], loss: 8.954226\n",
      "Epoch[12719/30000], loss: 8.954223\n",
      "Epoch[12739/30000], loss: 8.954219\n",
      "Epoch[12759/30000], loss: 8.954216\n",
      "Epoch[12779/30000], loss: 8.954211\n",
      "Epoch[12799/30000], loss: 8.954206\n",
      "Epoch[12819/30000], loss: 8.954203\n",
      "Epoch[12839/30000], loss: 8.954200\n",
      "Epoch[12859/30000], loss: 8.954195\n",
      "Epoch[12879/30000], loss: 8.954192\n",
      "Epoch[12899/30000], loss: 8.954187\n",
      "Epoch[12919/30000], loss: 8.954185\n",
      "Epoch[12939/30000], loss: 8.954182\n",
      "Epoch[12959/30000], loss: 8.954178\n",
      "Epoch[12979/30000], loss: 8.954174\n",
      "Epoch[12999/30000], loss: 8.954172\n",
      "Epoch[13019/30000], loss: 8.954168\n",
      "Epoch[13039/30000], loss: 8.954165\n",
      "Epoch[13059/30000], loss: 8.954162\n",
      "Epoch[13079/30000], loss: 8.954158\n",
      "Epoch[13099/30000], loss: 8.954155\n",
      "Epoch[13119/30000], loss: 8.954152\n",
      "Epoch[13139/30000], loss: 8.954148\n",
      "Epoch[13159/30000], loss: 8.954145\n",
      "Epoch[13179/30000], loss: 8.954144\n",
      "Epoch[13199/30000], loss: 8.954141\n",
      "Epoch[13219/30000], loss: 8.954138\n",
      "Epoch[13239/30000], loss: 8.954135\n",
      "Epoch[13259/30000], loss: 8.954132\n",
      "Epoch[13279/30000], loss: 8.954129\n",
      "Epoch[13299/30000], loss: 8.954126\n",
      "Epoch[13319/30000], loss: 8.954123\n",
      "Epoch[13339/30000], loss: 8.954122\n",
      "Epoch[13359/30000], loss: 8.954119\n",
      "Epoch[13379/30000], loss: 8.954116\n",
      "Epoch[13399/30000], loss: 8.954114\n",
      "Epoch[13419/30000], loss: 8.954112\n",
      "Epoch[13439/30000], loss: 8.954108\n",
      "Epoch[13459/30000], loss: 8.954106\n",
      "Epoch[13479/30000], loss: 8.954104\n",
      "Epoch[13499/30000], loss: 8.954102\n",
      "Epoch[13519/30000], loss: 8.954100\n",
      "Epoch[13539/30000], loss: 8.954097\n",
      "Epoch[13559/30000], loss: 8.954096\n",
      "Epoch[13579/30000], loss: 8.954093\n",
      "Epoch[13599/30000], loss: 8.954090\n",
      "Epoch[13619/30000], loss: 8.954088\n",
      "Epoch[13639/30000], loss: 8.954086\n",
      "Epoch[13659/30000], loss: 8.954084\n",
      "Epoch[13679/30000], loss: 8.954082\n",
      "Epoch[13699/30000], loss: 8.954081\n",
      "Epoch[13719/30000], loss: 8.954079\n",
      "Epoch[13739/30000], loss: 8.954077\n",
      "Epoch[13759/30000], loss: 8.954075\n",
      "Epoch[13779/30000], loss: 8.954073\n",
      "Epoch[13799/30000], loss: 8.954071\n",
      "Epoch[13819/30000], loss: 8.954069\n",
      "Epoch[13839/30000], loss: 8.954068\n",
      "Epoch[13859/30000], loss: 8.954066\n",
      "Epoch[13879/30000], loss: 8.954063\n",
      "Epoch[13899/30000], loss: 8.954062\n",
      "Epoch[13919/30000], loss: 8.954061\n",
      "Epoch[13939/30000], loss: 8.954058\n",
      "Epoch[13959/30000], loss: 8.954058\n",
      "Epoch[13979/30000], loss: 8.954055\n",
      "Epoch[13999/30000], loss: 8.954054\n",
      "Epoch[14019/30000], loss: 8.954051\n",
      "Epoch[14039/30000], loss: 8.954051\n",
      "Epoch[14059/30000], loss: 8.954049\n",
      "Epoch[14079/30000], loss: 8.954047\n",
      "Epoch[14099/30000], loss: 8.954046\n",
      "Epoch[14119/30000], loss: 8.954045\n",
      "Epoch[14139/30000], loss: 8.954043\n",
      "Epoch[14159/30000], loss: 8.954041\n",
      "Epoch[14179/30000], loss: 8.954041\n",
      "Epoch[14199/30000], loss: 8.954039\n",
      "Epoch[14219/30000], loss: 8.954038\n",
      "Epoch[14239/30000], loss: 8.954036\n",
      "Epoch[14259/30000], loss: 8.954035\n",
      "Epoch[14279/30000], loss: 8.954034\n",
      "Epoch[14299/30000], loss: 8.954032\n",
      "Epoch[14319/30000], loss: 8.954031\n",
      "Epoch[14339/30000], loss: 8.954030\n",
      "Epoch[14359/30000], loss: 8.954028\n",
      "Epoch[14379/30000], loss: 8.954026\n",
      "Epoch[14399/30000], loss: 8.954025\n",
      "Epoch[14419/30000], loss: 8.954025\n",
      "Epoch[14439/30000], loss: 8.954023\n",
      "Epoch[14459/30000], loss: 8.954022\n",
      "Epoch[14479/30000], loss: 8.954021\n",
      "Epoch[14499/30000], loss: 8.954020\n",
      "Epoch[14519/30000], loss: 8.954019\n",
      "Epoch[14539/30000], loss: 8.954018\n",
      "Epoch[14559/30000], loss: 8.954016\n",
      "Epoch[14579/30000], loss: 8.954016\n",
      "Epoch[14599/30000], loss: 8.954014\n",
      "Epoch[14619/30000], loss: 8.954013\n",
      "Epoch[14639/30000], loss: 8.954013\n",
      "Epoch[14659/30000], loss: 8.954012\n",
      "Epoch[14679/30000], loss: 8.954010\n",
      "Epoch[14699/30000], loss: 8.954010\n",
      "Epoch[14719/30000], loss: 8.954008\n",
      "Epoch[14739/30000], loss: 8.954008\n",
      "Epoch[14759/30000], loss: 8.954006\n",
      "Epoch[14779/30000], loss: 8.954006\n",
      "Epoch[14799/30000], loss: 8.954004\n",
      "Epoch[14819/30000], loss: 8.954003\n",
      "Epoch[14839/30000], loss: 8.954003\n",
      "Epoch[14859/30000], loss: 8.954001\n",
      "Epoch[14879/30000], loss: 8.954000\n",
      "Epoch[14899/30000], loss: 8.954000\n",
      "Epoch[14919/30000], loss: 8.954000\n",
      "Epoch[14939/30000], loss: 8.953999\n",
      "Epoch[14959/30000], loss: 8.953998\n",
      "Epoch[14979/30000], loss: 8.953997\n",
      "Epoch[14999/30000], loss: 8.953997\n",
      "Epoch[15019/30000], loss: 8.953996\n",
      "Epoch[15039/30000], loss: 8.953995\n",
      "Epoch[15059/30000], loss: 8.953995\n",
      "Epoch[15079/30000], loss: 8.953994\n",
      "Epoch[15099/30000], loss: 8.953992\n",
      "Epoch[15119/30000], loss: 8.953992\n",
      "Epoch[15139/30000], loss: 8.953992\n",
      "Epoch[15159/30000], loss: 8.953990\n",
      "Epoch[15179/30000], loss: 8.953990\n",
      "Epoch[15199/30000], loss: 8.953990\n",
      "Epoch[15219/30000], loss: 8.953989\n",
      "Epoch[15239/30000], loss: 8.953988\n",
      "Epoch[15259/30000], loss: 8.953987\n",
      "Epoch[15279/30000], loss: 8.953986\n",
      "Epoch[15299/30000], loss: 8.953986\n",
      "Epoch[15319/30000], loss: 8.953985\n",
      "Epoch[15339/30000], loss: 8.953984\n",
      "Epoch[15359/30000], loss: 8.953984\n",
      "Epoch[15379/30000], loss: 8.953984\n",
      "Epoch[15399/30000], loss: 8.953983\n",
      "Epoch[15419/30000], loss: 8.953982\n",
      "Epoch[15439/30000], loss: 8.953981\n",
      "Epoch[15459/30000], loss: 8.953980\n",
      "Epoch[15479/30000], loss: 8.953980\n",
      "Epoch[15499/30000], loss: 8.953980\n",
      "Epoch[15519/30000], loss: 8.953979\n",
      "Epoch[15539/30000], loss: 8.953979\n",
      "Epoch[15559/30000], loss: 8.953979\n",
      "Epoch[15579/30000], loss: 8.953978\n",
      "Epoch[15599/30000], loss: 8.953978\n",
      "Epoch[15619/30000], loss: 8.953977\n",
      "Epoch[15639/30000], loss: 8.953976\n",
      "Epoch[15659/30000], loss: 8.953976\n",
      "Epoch[15679/30000], loss: 8.953976\n",
      "Epoch[15699/30000], loss: 8.953975\n",
      "Epoch[15719/30000], loss: 8.953974\n",
      "Epoch[15739/30000], loss: 8.953975\n",
      "Epoch[15759/30000], loss: 8.953974\n",
      "Epoch[15779/30000], loss: 8.953973\n",
      "Epoch[15799/30000], loss: 8.953973\n",
      "Epoch[15819/30000], loss: 8.953971\n",
      "Epoch[15839/30000], loss: 8.953972\n",
      "Epoch[15859/30000], loss: 8.953971\n",
      "Epoch[15879/30000], loss: 8.953971\n",
      "Epoch[15899/30000], loss: 8.953972\n",
      "Epoch[15919/30000], loss: 8.953969\n",
      "Epoch[15939/30000], loss: 8.953970\n",
      "Epoch[15959/30000], loss: 8.953969\n",
      "Epoch[15979/30000], loss: 8.953969\n",
      "Epoch[15999/30000], loss: 8.953969\n",
      "Epoch[16019/30000], loss: 8.953968\n",
      "Epoch[16039/30000], loss: 8.953967\n",
      "Epoch[16059/30000], loss: 8.953968\n",
      "Epoch[16079/30000], loss: 8.953967\n",
      "Epoch[16099/30000], loss: 8.953966\n",
      "Epoch[16119/30000], loss: 8.953967\n",
      "Epoch[16139/30000], loss: 8.953966\n",
      "Epoch[16159/30000], loss: 8.953966\n",
      "Epoch[16179/30000], loss: 8.953965\n",
      "Epoch[16199/30000], loss: 8.953964\n",
      "Epoch[16219/30000], loss: 8.953964\n",
      "Epoch[16239/30000], loss: 8.953965\n",
      "Epoch[16259/30000], loss: 8.953964\n",
      "Epoch[16279/30000], loss: 8.953964\n",
      "Epoch[16299/30000], loss: 8.953964\n",
      "Epoch[16319/30000], loss: 8.953964\n",
      "Epoch[16339/30000], loss: 8.953963\n",
      "Epoch[16359/30000], loss: 8.953962\n",
      "Epoch[16379/30000], loss: 8.953962\n",
      "Epoch[16399/30000], loss: 8.953962\n",
      "Epoch[16419/30000], loss: 8.953961\n",
      "Epoch[16439/30000], loss: 8.953962\n",
      "Epoch[16459/30000], loss: 8.953960\n",
      "Epoch[16479/30000], loss: 8.953960\n",
      "Epoch[16499/30000], loss: 8.953960\n",
      "Epoch[16519/30000], loss: 8.953960\n",
      "Epoch[16539/30000], loss: 8.953960\n",
      "Epoch[16559/30000], loss: 8.953959\n",
      "Epoch[16579/30000], loss: 8.953959\n",
      "Epoch[16599/30000], loss: 8.953959\n",
      "Epoch[16619/30000], loss: 8.953959\n",
      "Epoch[16639/30000], loss: 8.953960\n",
      "Epoch[16659/30000], loss: 8.953959\n",
      "Epoch[16679/30000], loss: 8.953959\n",
      "Epoch[16699/30000], loss: 8.953959\n",
      "Epoch[16719/30000], loss: 8.953958\n",
      "Epoch[16739/30000], loss: 8.953957\n",
      "Epoch[16759/30000], loss: 8.953958\n",
      "Epoch[16779/30000], loss: 8.953958\n",
      "Epoch[16799/30000], loss: 8.953957\n",
      "Epoch[16819/30000], loss: 8.953957\n",
      "Epoch[16839/30000], loss: 8.953957\n",
      "Epoch[16859/30000], loss: 8.953957\n",
      "Epoch[16879/30000], loss: 8.953956\n",
      "Epoch[16899/30000], loss: 8.953957\n",
      "Epoch[16919/30000], loss: 8.953957\n",
      "Epoch[16939/30000], loss: 8.953956\n",
      "Epoch[16959/30000], loss: 8.953956\n",
      "Epoch[16979/30000], loss: 8.953955\n",
      "Epoch[16999/30000], loss: 8.953956\n",
      "Epoch[17019/30000], loss: 8.953955\n",
      "Epoch[17039/30000], loss: 8.953955\n",
      "Epoch[17059/30000], loss: 8.953955\n",
      "Epoch[17079/30000], loss: 8.953955\n",
      "Epoch[17099/30000], loss: 8.953955\n",
      "Epoch[17119/30000], loss: 8.953955\n",
      "Epoch[17139/30000], loss: 8.953954\n",
      "Epoch[17159/30000], loss: 8.953953\n",
      "Epoch[17179/30000], loss: 8.953954\n",
      "Epoch[17199/30000], loss: 8.953953\n",
      "Epoch[17219/30000], loss: 8.953953\n",
      "Epoch[17239/30000], loss: 8.953953\n",
      "Epoch[17259/30000], loss: 8.953953\n",
      "Epoch[17279/30000], loss: 8.953953\n",
      "Epoch[17299/30000], loss: 8.953953\n",
      "Epoch[17319/30000], loss: 8.953953\n",
      "Epoch[17339/30000], loss: 8.953952\n",
      "Epoch[17359/30000], loss: 8.953953\n",
      "Epoch[17379/30000], loss: 8.953953\n",
      "Epoch[17399/30000], loss: 8.953953\n",
      "Epoch[17419/30000], loss: 8.953953\n",
      "Epoch[17439/30000], loss: 8.953951\n",
      "Epoch[17459/30000], loss: 8.953951\n",
      "Epoch[17479/30000], loss: 8.953952\n",
      "Epoch[17499/30000], loss: 8.953951\n",
      "Epoch[17519/30000], loss: 8.953951\n",
      "Epoch[17539/30000], loss: 8.953951\n",
      "Epoch[17559/30000], loss: 8.953951\n",
      "Epoch[17579/30000], loss: 8.953951\n",
      "Epoch[17599/30000], loss: 8.953951\n",
      "Epoch[17619/30000], loss: 8.953949\n",
      "Epoch[17639/30000], loss: 8.953950\n",
      "Epoch[17659/30000], loss: 8.953949\n",
      "Epoch[17679/30000], loss: 8.953951\n",
      "Epoch[17699/30000], loss: 8.953950\n",
      "Epoch[17719/30000], loss: 8.953950\n",
      "Epoch[17739/30000], loss: 8.953951\n",
      "Epoch[17759/30000], loss: 8.953951\n",
      "Epoch[17779/30000], loss: 8.953950\n",
      "Epoch[17799/30000], loss: 8.953949\n",
      "Epoch[17819/30000], loss: 8.953949\n",
      "Epoch[17839/30000], loss: 8.953949\n",
      "Epoch[17859/30000], loss: 8.953949\n",
      "Epoch[17879/30000], loss: 8.953949\n",
      "Epoch[17899/30000], loss: 8.953949\n",
      "Epoch[17919/30000], loss: 8.953949\n",
      "Epoch[17939/30000], loss: 8.953949\n",
      "Epoch[17959/30000], loss: 8.953949\n",
      "Epoch[17979/30000], loss: 8.953948\n",
      "Epoch[17999/30000], loss: 8.953948\n",
      "Epoch[18019/30000], loss: 8.953947\n",
      "Epoch[18039/30000], loss: 8.953948\n",
      "Epoch[18059/30000], loss: 8.953948\n",
      "Epoch[18079/30000], loss: 8.953949\n",
      "Epoch[18099/30000], loss: 8.953948\n",
      "Epoch[18119/30000], loss: 8.953948\n",
      "Epoch[18139/30000], loss: 8.953949\n",
      "Epoch[18159/30000], loss: 8.953948\n",
      "Epoch[18179/30000], loss: 8.953949\n",
      "Epoch[18199/30000], loss: 8.953948\n",
      "Epoch[18219/30000], loss: 8.953948\n",
      "Epoch[18239/30000], loss: 8.953949\n",
      "Epoch[18259/30000], loss: 8.953947\n",
      "Epoch[18279/30000], loss: 8.953947\n",
      "Epoch[18299/30000], loss: 8.953947\n",
      "Epoch[18319/30000], loss: 8.953947\n",
      "Epoch[18339/30000], loss: 8.953947\n",
      "Epoch[18359/30000], loss: 8.953947\n",
      "Epoch[18379/30000], loss: 8.953947\n",
      "Epoch[18399/30000], loss: 8.953947\n",
      "Epoch[18419/30000], loss: 8.953947\n",
      "Epoch[18439/30000], loss: 8.953947\n",
      "Epoch[18459/30000], loss: 8.953946\n",
      "Epoch[18479/30000], loss: 8.953947\n",
      "Epoch[18499/30000], loss: 8.953946\n",
      "Epoch[18519/30000], loss: 8.953947\n",
      "Epoch[18539/30000], loss: 8.953946\n",
      "Epoch[18559/30000], loss: 8.953947\n",
      "Epoch[18579/30000], loss: 8.953947\n",
      "Epoch[18599/30000], loss: 8.953947\n",
      "Epoch[18619/30000], loss: 8.953945\n",
      "Epoch[18639/30000], loss: 8.953947\n",
      "Epoch[18659/30000], loss: 8.953947\n",
      "Epoch[18679/30000], loss: 8.953946\n",
      "Epoch[18699/30000], loss: 8.953947\n",
      "Epoch[18719/30000], loss: 8.953945\n",
      "Epoch[18739/30000], loss: 8.953946\n",
      "Epoch[18759/30000], loss: 8.953946\n",
      "Epoch[18779/30000], loss: 8.953945\n",
      "Epoch[18799/30000], loss: 8.953945\n",
      "Epoch[18819/30000], loss: 8.953945\n",
      "Epoch[18839/30000], loss: 8.953945\n",
      "Epoch[18859/30000], loss: 8.953945\n",
      "Epoch[18879/30000], loss: 8.953945\n",
      "Epoch[18899/30000], loss: 8.953945\n",
      "Epoch[18919/30000], loss: 8.953946\n",
      "Epoch[18939/30000], loss: 8.953946\n",
      "Epoch[18959/30000], loss: 8.953945\n",
      "Epoch[18979/30000], loss: 8.953945\n",
      "Epoch[18999/30000], loss: 8.953945\n",
      "Epoch[19019/30000], loss: 8.953945\n",
      "Epoch[19039/30000], loss: 8.953945\n",
      "Epoch[19059/30000], loss: 8.953945\n",
      "Epoch[19079/30000], loss: 8.953945\n",
      "Epoch[19099/30000], loss: 8.953945\n",
      "Epoch[19119/30000], loss: 8.953945\n",
      "Epoch[19139/30000], loss: 8.953944\n",
      "Epoch[19159/30000], loss: 8.953945\n",
      "Epoch[19179/30000], loss: 8.953945\n",
      "Epoch[19199/30000], loss: 8.953943\n",
      "Epoch[19219/30000], loss: 8.953945\n",
      "Epoch[19239/30000], loss: 8.953945\n",
      "Epoch[19259/30000], loss: 8.953945\n",
      "Epoch[19279/30000], loss: 8.953944\n",
      "Epoch[19299/30000], loss: 8.953945\n",
      "Epoch[19319/30000], loss: 8.953945\n",
      "Epoch[19339/30000], loss: 8.953945\n",
      "Epoch[19359/30000], loss: 8.953945\n",
      "Epoch[19379/30000], loss: 8.953944\n",
      "Epoch[19399/30000], loss: 8.953945\n",
      "Epoch[19419/30000], loss: 8.953945\n",
      "Epoch[19439/30000], loss: 8.953945\n",
      "Epoch[19459/30000], loss: 8.953944\n",
      "Epoch[19479/30000], loss: 8.953944\n",
      "Epoch[19499/30000], loss: 8.953945\n",
      "Epoch[19519/30000], loss: 8.953944\n",
      "Epoch[19539/30000], loss: 8.953944\n",
      "Epoch[19559/30000], loss: 8.953945\n",
      "Epoch[19579/30000], loss: 8.953944\n",
      "Epoch[19599/30000], loss: 8.953945\n",
      "Epoch[19619/30000], loss: 8.953944\n",
      "Epoch[19639/30000], loss: 8.953945\n",
      "Epoch[19659/30000], loss: 8.953943\n",
      "Epoch[19679/30000], loss: 8.953944\n",
      "Epoch[19699/30000], loss: 8.953944\n",
      "Epoch[19719/30000], loss: 8.953944\n",
      "Epoch[19739/30000], loss: 8.953943\n",
      "Epoch[19759/30000], loss: 8.953943\n",
      "Epoch[19779/30000], loss: 8.953944\n",
      "Epoch[19799/30000], loss: 8.953945\n",
      "Epoch[19819/30000], loss: 8.953945\n",
      "Epoch[19839/30000], loss: 8.953943\n",
      "Epoch[19859/30000], loss: 8.953943\n",
      "Epoch[19879/30000], loss: 8.953944\n",
      "Epoch[19899/30000], loss: 8.953943\n",
      "Epoch[19919/30000], loss: 8.953943\n",
      "Epoch[19939/30000], loss: 8.953944\n",
      "Epoch[19959/30000], loss: 8.953944\n",
      "Epoch[19979/30000], loss: 8.953943\n",
      "Epoch[19999/30000], loss: 8.953943\n",
      "Epoch[20019/30000], loss: 8.953944\n",
      "Epoch[20039/30000], loss: 8.953945\n",
      "Epoch[20059/30000], loss: 8.953943\n",
      "Epoch[20079/30000], loss: 8.953943\n",
      "Epoch[20099/30000], loss: 8.953943\n",
      "Epoch[20119/30000], loss: 8.953943\n",
      "Epoch[20139/30000], loss: 8.953943\n",
      "Epoch[20159/30000], loss: 8.953944\n",
      "Epoch[20179/30000], loss: 8.953943\n",
      "Epoch[20199/30000], loss: 8.953944\n",
      "Epoch[20219/30000], loss: 8.953943\n",
      "Epoch[20239/30000], loss: 8.953943\n",
      "Epoch[20259/30000], loss: 8.953942\n",
      "Epoch[20279/30000], loss: 8.953943\n",
      "Epoch[20299/30000], loss: 8.953943\n",
      "Epoch[20319/30000], loss: 8.953943\n",
      "Epoch[20339/30000], loss: 8.953943\n",
      "Epoch[20359/30000], loss: 8.953943\n",
      "Epoch[20379/30000], loss: 8.953943\n",
      "Epoch[20399/30000], loss: 8.953943\n",
      "Epoch[20419/30000], loss: 8.953944\n",
      "Epoch[20439/30000], loss: 8.953944\n",
      "Epoch[20459/30000], loss: 8.953944\n",
      "Epoch[20479/30000], loss: 8.953943\n",
      "Epoch[20499/30000], loss: 8.953943\n",
      "Epoch[20519/30000], loss: 8.953943\n",
      "Epoch[20539/30000], loss: 8.953944\n",
      "Epoch[20559/30000], loss: 8.953942\n",
      "Epoch[20579/30000], loss: 8.953944\n",
      "Epoch[20599/30000], loss: 8.953943\n",
      "Epoch[20619/30000], loss: 8.953943\n",
      "Epoch[20639/30000], loss: 8.953943\n",
      "Epoch[20659/30000], loss: 8.953943\n",
      "Epoch[20679/30000], loss: 8.953942\n",
      "Epoch[20699/30000], loss: 8.953943\n",
      "Epoch[20719/30000], loss: 8.953943\n",
      "Epoch[20739/30000], loss: 8.953943\n",
      "Epoch[20759/30000], loss: 8.953943\n",
      "Epoch[20779/30000], loss: 8.953943\n",
      "Epoch[20799/30000], loss: 8.953941\n",
      "Epoch[20819/30000], loss: 8.953943\n",
      "Epoch[20839/30000], loss: 8.953943\n",
      "Epoch[20859/30000], loss: 8.953944\n",
      "Epoch[20879/30000], loss: 8.953943\n",
      "Epoch[20899/30000], loss: 8.953943\n",
      "Epoch[20919/30000], loss: 8.953944\n",
      "Epoch[20939/30000], loss: 8.953943\n",
      "Epoch[20959/30000], loss: 8.953943\n",
      "Epoch[20979/30000], loss: 8.953943\n",
      "Epoch[20999/30000], loss: 8.953943\n",
      "Epoch[21019/30000], loss: 8.953942\n",
      "Epoch[21039/30000], loss: 8.953943\n",
      "Epoch[21059/30000], loss: 8.953943\n",
      "Epoch[21079/30000], loss: 8.953943\n",
      "Epoch[21099/30000], loss: 8.953943\n",
      "Epoch[21119/30000], loss: 8.953942\n",
      "Epoch[21139/30000], loss: 8.953943\n",
      "Epoch[21159/30000], loss: 8.953943\n",
      "Epoch[21179/30000], loss: 8.953943\n",
      "Epoch[21199/30000], loss: 8.953942\n",
      "Epoch[21219/30000], loss: 8.953943\n",
      "Epoch[21239/30000], loss: 8.953943\n",
      "Epoch[21259/30000], loss: 8.953942\n",
      "Epoch[21279/30000], loss: 8.953944\n",
      "Epoch[21299/30000], loss: 8.953943\n",
      "Epoch[21319/30000], loss: 8.953942\n",
      "Epoch[21339/30000], loss: 8.953943\n",
      "Epoch[21359/30000], loss: 8.953943\n",
      "Epoch[21379/30000], loss: 8.953942\n",
      "Epoch[21399/30000], loss: 8.953943\n",
      "Epoch[21419/30000], loss: 8.953943\n",
      "Epoch[21439/30000], loss: 8.953943\n",
      "Epoch[21459/30000], loss: 8.953942\n",
      "Epoch[21479/30000], loss: 8.953942\n",
      "Epoch[21499/30000], loss: 8.953943\n",
      "Epoch[21519/30000], loss: 8.953942\n",
      "Epoch[21539/30000], loss: 8.953943\n",
      "Epoch[21559/30000], loss: 8.953942\n",
      "Epoch[21579/30000], loss: 8.953943\n",
      "Epoch[21599/30000], loss: 8.953943\n",
      "Epoch[21619/30000], loss: 8.953941\n",
      "Epoch[21639/30000], loss: 8.953943\n",
      "Epoch[21659/30000], loss: 8.953943\n",
      "Epoch[21679/30000], loss: 8.953943\n",
      "Epoch[21699/30000], loss: 8.953942\n",
      "Epoch[21719/30000], loss: 8.953943\n",
      "Epoch[21739/30000], loss: 8.953942\n",
      "Epoch[21759/30000], loss: 8.953941\n",
      "Epoch[21779/30000], loss: 8.953941\n",
      "Epoch[21799/30000], loss: 8.953943\n",
      "Epoch[21819/30000], loss: 8.953941\n",
      "Epoch[21839/30000], loss: 8.953943\n",
      "Epoch[21859/30000], loss: 8.953943\n",
      "Epoch[21879/30000], loss: 8.953943\n",
      "Epoch[21899/30000], loss: 8.953943\n",
      "Epoch[21919/30000], loss: 8.953941\n",
      "Epoch[21939/30000], loss: 8.953942\n",
      "Epoch[21959/30000], loss: 8.953943\n",
      "Epoch[21979/30000], loss: 8.953942\n",
      "Epoch[21999/30000], loss: 8.953941\n",
      "Epoch[22019/30000], loss: 8.953943\n",
      "Epoch[22039/30000], loss: 8.953942\n",
      "Epoch[22059/30000], loss: 8.953943\n",
      "Epoch[22079/30000], loss: 8.953942\n",
      "Epoch[22099/30000], loss: 8.953941\n",
      "Epoch[22119/30000], loss: 8.953942\n",
      "Epoch[22139/30000], loss: 8.953942\n",
      "Epoch[22159/30000], loss: 8.953943\n",
      "Epoch[22179/30000], loss: 8.953942\n",
      "Epoch[22199/30000], loss: 8.953942\n",
      "Epoch[22219/30000], loss: 8.953943\n",
      "Epoch[22239/30000], loss: 8.953941\n",
      "Epoch[22259/30000], loss: 8.953943\n",
      "Epoch[22279/30000], loss: 8.953943\n",
      "Epoch[22299/30000], loss: 8.953941\n",
      "Epoch[22319/30000], loss: 8.953942\n",
      "Epoch[22339/30000], loss: 8.953941\n",
      "Epoch[22359/30000], loss: 8.953942\n",
      "Epoch[22379/30000], loss: 8.953941\n",
      "Epoch[22399/30000], loss: 8.953942\n",
      "Epoch[22419/30000], loss: 8.953943\n",
      "Epoch[22439/30000], loss: 8.953943\n",
      "Epoch[22459/30000], loss: 8.953941\n",
      "Epoch[22479/30000], loss: 8.953943\n",
      "Epoch[22499/30000], loss: 8.953943\n",
      "Epoch[22519/30000], loss: 8.953941\n",
      "Epoch[22539/30000], loss: 8.953943\n",
      "Epoch[22559/30000], loss: 8.953943\n",
      "Epoch[22579/30000], loss: 8.953943\n",
      "Epoch[22599/30000], loss: 8.953943\n",
      "Epoch[22619/30000], loss: 8.953943\n",
      "Epoch[22639/30000], loss: 8.953943\n",
      "Epoch[22659/30000], loss: 8.953942\n",
      "Epoch[22679/30000], loss: 8.953943\n",
      "Epoch[22699/30000], loss: 8.953942\n",
      "Epoch[22719/30000], loss: 8.953943\n",
      "Epoch[22739/30000], loss: 8.953941\n",
      "Epoch[22759/30000], loss: 8.953943\n",
      "Epoch[22779/30000], loss: 8.953943\n",
      "Epoch[22799/30000], loss: 8.953941\n",
      "Epoch[22819/30000], loss: 8.953943\n",
      "Epoch[22839/30000], loss: 8.953941\n",
      "Epoch[22859/30000], loss: 8.953943\n",
      "Epoch[22879/30000], loss: 8.953943\n",
      "Epoch[22899/30000], loss: 8.953941\n",
      "Epoch[22919/30000], loss: 8.953942\n",
      "Epoch[22939/30000], loss: 8.953942\n",
      "Epoch[22959/30000], loss: 8.953943\n",
      "Epoch[22979/30000], loss: 8.953941\n",
      "Epoch[22999/30000], loss: 8.953943\n",
      "Epoch[23019/30000], loss: 8.953942\n",
      "Epoch[23039/30000], loss: 8.953941\n",
      "Epoch[23059/30000], loss: 8.953943\n",
      "Epoch[23079/30000], loss: 8.953942\n",
      "Epoch[23099/30000], loss: 8.953943\n",
      "Epoch[23119/30000], loss: 8.953942\n",
      "Epoch[23139/30000], loss: 8.953942\n",
      "Epoch[23159/30000], loss: 8.953943\n",
      "Epoch[23179/30000], loss: 8.953942\n",
      "Epoch[23199/30000], loss: 8.953942\n",
      "Epoch[23219/30000], loss: 8.953942\n",
      "Epoch[23239/30000], loss: 8.953943\n",
      "Epoch[23259/30000], loss: 8.953943\n",
      "Epoch[23279/30000], loss: 8.953942\n",
      "Epoch[23299/30000], loss: 8.953941\n",
      "Epoch[23319/30000], loss: 8.953941\n",
      "Epoch[23339/30000], loss: 8.953943\n",
      "Epoch[23359/30000], loss: 8.953942\n",
      "Epoch[23379/30000], loss: 8.953941\n",
      "Epoch[23399/30000], loss: 8.953941\n",
      "Epoch[23419/30000], loss: 8.953942\n",
      "Epoch[23439/30000], loss: 8.953943\n",
      "Epoch[23459/30000], loss: 8.953942\n",
      "Epoch[23479/30000], loss: 8.953943\n",
      "Epoch[23499/30000], loss: 8.953941\n",
      "Epoch[23519/30000], loss: 8.953943\n",
      "Epoch[23539/30000], loss: 8.953943\n",
      "Epoch[23559/30000], loss: 8.953943\n",
      "Epoch[23579/30000], loss: 8.953942\n",
      "Epoch[23599/30000], loss: 8.953942\n",
      "Epoch[23619/30000], loss: 8.953942\n",
      "Epoch[23639/30000], loss: 8.953942\n",
      "Epoch[23659/30000], loss: 8.953942\n",
      "Epoch[23679/30000], loss: 8.953941\n",
      "Epoch[23699/30000], loss: 8.953941\n",
      "Epoch[23719/30000], loss: 8.953943\n",
      "Epoch[23739/30000], loss: 8.953943\n",
      "Epoch[23759/30000], loss: 8.953942\n",
      "Epoch[23779/30000], loss: 8.953942\n",
      "Epoch[23799/30000], loss: 8.953943\n",
      "Epoch[23819/30000], loss: 8.953941\n",
      "Epoch[23839/30000], loss: 8.953943\n",
      "Epoch[23859/30000], loss: 8.953941\n",
      "Epoch[23879/30000], loss: 8.953942\n",
      "Epoch[23899/30000], loss: 8.953943\n",
      "Epoch[23919/30000], loss: 8.953943\n",
      "Epoch[23939/30000], loss: 8.953942\n",
      "Epoch[23959/30000], loss: 8.953941\n",
      "Epoch[23979/30000], loss: 8.953943\n",
      "Epoch[23999/30000], loss: 8.953943\n",
      "Epoch[24019/30000], loss: 8.953942\n",
      "Epoch[24039/30000], loss: 8.953943\n",
      "Epoch[24059/30000], loss: 8.953942\n",
      "Epoch[24079/30000], loss: 8.953942\n",
      "Epoch[24099/30000], loss: 8.953942\n",
      "Epoch[24119/30000], loss: 8.953942\n",
      "Epoch[24139/30000], loss: 8.953941\n",
      "Epoch[24159/30000], loss: 8.953941\n",
      "Epoch[24179/30000], loss: 8.953942\n",
      "Epoch[24199/30000], loss: 8.953941\n",
      "Epoch[24219/30000], loss: 8.953943\n",
      "Epoch[24239/30000], loss: 8.953941\n",
      "Epoch[24259/30000], loss: 8.953942\n",
      "Epoch[24279/30000], loss: 8.953942\n",
      "Epoch[24299/30000], loss: 8.953942\n",
      "Epoch[24319/30000], loss: 8.953943\n",
      "Epoch[24339/30000], loss: 8.953942\n",
      "Epoch[24359/30000], loss: 8.953942\n",
      "Epoch[24379/30000], loss: 8.953941\n",
      "Epoch[24399/30000], loss: 8.953943\n",
      "Epoch[24419/30000], loss: 8.953942\n",
      "Epoch[24439/30000], loss: 8.953941\n",
      "Epoch[24459/30000], loss: 8.953942\n",
      "Epoch[24479/30000], loss: 8.953943\n",
      "Epoch[24499/30000], loss: 8.953942\n",
      "Epoch[24519/30000], loss: 8.953942\n",
      "Epoch[24539/30000], loss: 8.953941\n",
      "Epoch[24559/30000], loss: 8.953943\n",
      "Epoch[24579/30000], loss: 8.953943\n",
      "Epoch[24599/30000], loss: 8.953942\n",
      "Epoch[24619/30000], loss: 8.953942\n",
      "Epoch[24639/30000], loss: 8.953942\n",
      "Epoch[24659/30000], loss: 8.953941\n",
      "Epoch[24679/30000], loss: 8.953943\n",
      "Epoch[24699/30000], loss: 8.953942\n",
      "Epoch[24719/30000], loss: 8.953942\n",
      "Epoch[24739/30000], loss: 8.953942\n",
      "Epoch[24759/30000], loss: 8.953942\n",
      "Epoch[24779/30000], loss: 8.953941\n",
      "Epoch[24799/30000], loss: 8.953941\n",
      "Epoch[24819/30000], loss: 8.953941\n",
      "Epoch[24839/30000], loss: 8.953942\n",
      "Epoch[24859/30000], loss: 8.953943\n",
      "Epoch[24879/30000], loss: 8.953941\n",
      "Epoch[24899/30000], loss: 8.953942\n",
      "Epoch[24919/30000], loss: 8.953942\n",
      "Epoch[24939/30000], loss: 8.953943\n",
      "Epoch[24959/30000], loss: 8.953942\n",
      "Epoch[24979/30000], loss: 8.953941\n",
      "Epoch[24999/30000], loss: 8.953943\n",
      "Epoch[25019/30000], loss: 8.953942\n",
      "Epoch[25039/30000], loss: 8.953943\n",
      "Epoch[25059/30000], loss: 8.953941\n",
      "Epoch[25079/30000], loss: 8.953943\n",
      "Epoch[25099/30000], loss: 8.953942\n",
      "Epoch[25119/30000], loss: 8.953941\n",
      "Epoch[25139/30000], loss: 8.953941\n",
      "Epoch[25159/30000], loss: 8.953943\n",
      "Epoch[25179/30000], loss: 8.953941\n",
      "Epoch[25199/30000], loss: 8.953941\n",
      "Epoch[25219/30000], loss: 8.953943\n",
      "Epoch[25239/30000], loss: 8.953941\n",
      "Epoch[25259/30000], loss: 8.953942\n",
      "Epoch[25279/30000], loss: 8.953943\n",
      "Epoch[25299/30000], loss: 8.953941\n",
      "Epoch[25319/30000], loss: 8.953942\n",
      "Epoch[25339/30000], loss: 8.953943\n",
      "Epoch[25359/30000], loss: 8.953942\n",
      "Epoch[25379/30000], loss: 8.953941\n",
      "Epoch[25399/30000], loss: 8.953941\n",
      "Epoch[25419/30000], loss: 8.953942\n",
      "Epoch[25439/30000], loss: 8.953942\n",
      "Epoch[25459/30000], loss: 8.953942\n",
      "Epoch[25479/30000], loss: 8.953942\n",
      "Epoch[25499/30000], loss: 8.953942\n",
      "Epoch[25519/30000], loss: 8.953943\n",
      "Epoch[25539/30000], loss: 8.953942\n",
      "Epoch[25559/30000], loss: 8.953941\n",
      "Epoch[25579/30000], loss: 8.953943\n",
      "Epoch[25599/30000], loss: 8.953942\n",
      "Epoch[25619/30000], loss: 8.953943\n",
      "Epoch[25639/30000], loss: 8.953943\n",
      "Epoch[25659/30000], loss: 8.953943\n",
      "Epoch[25679/30000], loss: 8.953943\n",
      "Epoch[25699/30000], loss: 8.953943\n",
      "Epoch[25719/30000], loss: 8.953943\n",
      "Epoch[25739/30000], loss: 8.953943\n",
      "Epoch[25759/30000], loss: 8.953943\n",
      "Epoch[25779/30000], loss: 8.953943\n",
      "Epoch[25799/30000], loss: 8.953943\n",
      "Epoch[25819/30000], loss: 8.953943\n",
      "Epoch[25839/30000], loss: 8.953943\n",
      "Epoch[25859/30000], loss: 8.953943\n",
      "Epoch[25879/30000], loss: 8.953943\n",
      "Epoch[25899/30000], loss: 8.953943\n",
      "Epoch[25919/30000], loss: 8.953943\n",
      "Epoch[25939/30000], loss: 8.953943\n",
      "Epoch[25959/30000], loss: 8.953943\n",
      "Epoch[25979/30000], loss: 8.953943\n",
      "Epoch[25999/30000], loss: 8.953943\n",
      "Epoch[26019/30000], loss: 8.953943\n",
      "Epoch[26039/30000], loss: 8.953943\n",
      "Epoch[26059/30000], loss: 8.953943\n",
      "Epoch[26079/30000], loss: 8.953943\n",
      "Epoch[26099/30000], loss: 8.953943\n",
      "Epoch[26119/30000], loss: 8.953943\n",
      "Epoch[26139/30000], loss: 8.953943\n",
      "Epoch[26159/30000], loss: 8.953943\n",
      "Epoch[26179/30000], loss: 8.953943\n",
      "Epoch[26199/30000], loss: 8.953943\n",
      "Epoch[26219/30000], loss: 8.953943\n",
      "Epoch[26239/30000], loss: 8.953943\n",
      "Epoch[26259/30000], loss: 8.953943\n",
      "Epoch[26279/30000], loss: 8.953943\n",
      "Epoch[26299/30000], loss: 8.953943\n",
      "Epoch[26319/30000], loss: 8.953943\n",
      "Epoch[26339/30000], loss: 8.953943\n",
      "Epoch[26359/30000], loss: 8.953943\n",
      "Epoch[26379/30000], loss: 8.953943\n",
      "Epoch[26399/30000], loss: 8.953943\n",
      "Epoch[26419/30000], loss: 8.953943\n",
      "Epoch[26439/30000], loss: 8.953943\n",
      "Epoch[26459/30000], loss: 8.953943\n",
      "Epoch[26479/30000], loss: 8.953943\n",
      "Epoch[26499/30000], loss: 8.953943\n",
      "Epoch[26519/30000], loss: 8.953943\n",
      "Epoch[26539/30000], loss: 8.953943\n",
      "Epoch[26559/30000], loss: 8.953943\n",
      "Epoch[26579/30000], loss: 8.953943\n",
      "Epoch[26599/30000], loss: 8.953943\n",
      "Epoch[26619/30000], loss: 8.953943\n",
      "Epoch[26639/30000], loss: 8.953943\n",
      "Epoch[26659/30000], loss: 8.953943\n",
      "Epoch[26679/30000], loss: 8.953943\n",
      "Epoch[26699/30000], loss: 8.953943\n",
      "Epoch[26719/30000], loss: 8.953943\n",
      "Epoch[26739/30000], loss: 8.953943\n",
      "Epoch[26759/30000], loss: 8.953943\n",
      "Epoch[26779/30000], loss: 8.953943\n",
      "Epoch[26799/30000], loss: 8.953943\n",
      "Epoch[26819/30000], loss: 8.953943\n",
      "Epoch[26839/30000], loss: 8.953943\n",
      "Epoch[26859/30000], loss: 8.953943\n",
      "Epoch[26879/30000], loss: 8.953943\n",
      "Epoch[26899/30000], loss: 8.953943\n",
      "Epoch[26919/30000], loss: 8.953943\n",
      "Epoch[26939/30000], loss: 8.953943\n",
      "Epoch[26959/30000], loss: 8.953943\n",
      "Epoch[26979/30000], loss: 8.953943\n",
      "Epoch[26999/30000], loss: 8.953943\n",
      "Epoch[27019/30000], loss: 8.953943\n",
      "Epoch[27039/30000], loss: 8.953943\n",
      "Epoch[27059/30000], loss: 8.953943\n",
      "Epoch[27079/30000], loss: 8.953943\n",
      "Epoch[27099/30000], loss: 8.953943\n",
      "Epoch[27119/30000], loss: 8.953943\n",
      "Epoch[27139/30000], loss: 8.953943\n",
      "Epoch[27159/30000], loss: 8.953943\n",
      "Epoch[27179/30000], loss: 8.953943\n",
      "Epoch[27199/30000], loss: 8.953943\n",
      "Epoch[27219/30000], loss: 8.953943\n",
      "Epoch[27239/30000], loss: 8.953943\n",
      "Epoch[27259/30000], loss: 8.953943\n",
      "Epoch[27279/30000], loss: 8.953943\n",
      "Epoch[27299/30000], loss: 8.953943\n",
      "Epoch[27319/30000], loss: 8.953943\n",
      "Epoch[27339/30000], loss: 8.953943\n",
      "Epoch[27359/30000], loss: 8.953943\n",
      "Epoch[27379/30000], loss: 8.953943\n",
      "Epoch[27399/30000], loss: 8.953943\n",
      "Epoch[27419/30000], loss: 8.953943\n",
      "Epoch[27439/30000], loss: 8.953943\n",
      "Epoch[27459/30000], loss: 8.953943\n",
      "Epoch[27479/30000], loss: 8.953943\n",
      "Epoch[27499/30000], loss: 8.953943\n",
      "Epoch[27519/30000], loss: 8.953943\n",
      "Epoch[27539/30000], loss: 8.953943\n",
      "Epoch[27559/30000], loss: 8.953943\n",
      "Epoch[27579/30000], loss: 8.953943\n",
      "Epoch[27599/30000], loss: 8.953943\n",
      "Epoch[27619/30000], loss: 8.953943\n",
      "Epoch[27639/30000], loss: 8.953943\n",
      "Epoch[27659/30000], loss: 8.953943\n",
      "Epoch[27679/30000], loss: 8.953943\n",
      "Epoch[27699/30000], loss: 8.953943\n",
      "Epoch[27719/30000], loss: 8.953943\n",
      "Epoch[27739/30000], loss: 8.953943\n",
      "Epoch[27759/30000], loss: 8.953943\n",
      "Epoch[27779/30000], loss: 8.953943\n",
      "Epoch[27799/30000], loss: 8.953943\n",
      "Epoch[27819/30000], loss: 8.953943\n",
      "Epoch[27839/30000], loss: 8.953943\n",
      "Epoch[27859/30000], loss: 8.953943\n",
      "Epoch[27879/30000], loss: 8.953943\n",
      "Epoch[27899/30000], loss: 8.953943\n",
      "Epoch[27919/30000], loss: 8.953943\n",
      "Epoch[27939/30000], loss: 8.953943\n",
      "Epoch[27959/30000], loss: 8.953943\n",
      "Epoch[27979/30000], loss: 8.953943\n",
      "Epoch[27999/30000], loss: 8.953943\n",
      "Epoch[28019/30000], loss: 8.953943\n",
      "Epoch[28039/30000], loss: 8.953943\n",
      "Epoch[28059/30000], loss: 8.953943\n",
      "Epoch[28079/30000], loss: 8.953943\n",
      "Epoch[28099/30000], loss: 8.953943\n",
      "Epoch[28119/30000], loss: 8.953943\n",
      "Epoch[28139/30000], loss: 8.953943\n",
      "Epoch[28159/30000], loss: 8.953943\n",
      "Epoch[28179/30000], loss: 8.953943\n",
      "Epoch[28199/30000], loss: 8.953943\n",
      "Epoch[28219/30000], loss: 8.953943\n",
      "Epoch[28239/30000], loss: 8.953943\n",
      "Epoch[28259/30000], loss: 8.953943\n",
      "Epoch[28279/30000], loss: 8.953943\n",
      "Epoch[28299/30000], loss: 8.953943\n",
      "Epoch[28319/30000], loss: 8.953943\n",
      "Epoch[28339/30000], loss: 8.953943\n",
      "Epoch[28359/30000], loss: 8.953943\n",
      "Epoch[28379/30000], loss: 8.953943\n",
      "Epoch[28399/30000], loss: 8.953943\n",
      "Epoch[28419/30000], loss: 8.953943\n",
      "Epoch[28439/30000], loss: 8.953943\n",
      "Epoch[28459/30000], loss: 8.953943\n",
      "Epoch[28479/30000], loss: 8.953943\n",
      "Epoch[28499/30000], loss: 8.953943\n",
      "Epoch[28519/30000], loss: 8.953943\n",
      "Epoch[28539/30000], loss: 8.953943\n",
      "Epoch[28559/30000], loss: 8.953943\n",
      "Epoch[28579/30000], loss: 8.953943\n",
      "Epoch[28599/30000], loss: 8.953943\n",
      "Epoch[28619/30000], loss: 8.953943\n",
      "Epoch[28639/30000], loss: 8.953943\n",
      "Epoch[28659/30000], loss: 8.953943\n",
      "Epoch[28679/30000], loss: 8.953943\n",
      "Epoch[28699/30000], loss: 8.953943\n",
      "Epoch[28719/30000], loss: 8.953943\n",
      "Epoch[28739/30000], loss: 8.953943\n",
      "Epoch[28759/30000], loss: 8.953943\n",
      "Epoch[28779/30000], loss: 8.953943\n",
      "Epoch[28799/30000], loss: 8.953943\n",
      "Epoch[28819/30000], loss: 8.953943\n",
      "Epoch[28839/30000], loss: 8.953943\n",
      "Epoch[28859/30000], loss: 8.953943\n",
      "Epoch[28879/30000], loss: 8.953943\n",
      "Epoch[28899/30000], loss: 8.953943\n",
      "Epoch[28919/30000], loss: 8.953943\n",
      "Epoch[28939/30000], loss: 8.953943\n",
      "Epoch[28959/30000], loss: 8.953943\n",
      "Epoch[28979/30000], loss: 8.953943\n",
      "Epoch[28999/30000], loss: 8.953943\n",
      "Epoch[29019/30000], loss: 8.953943\n",
      "Epoch[29039/30000], loss: 8.953943\n",
      "Epoch[29059/30000], loss: 8.953943\n",
      "Epoch[29079/30000], loss: 8.953943\n",
      "Epoch[29099/30000], loss: 8.953943\n",
      "Epoch[29119/30000], loss: 8.953943\n",
      "Epoch[29139/30000], loss: 8.953943\n",
      "Epoch[29159/30000], loss: 8.953943\n",
      "Epoch[29179/30000], loss: 8.953943\n",
      "Epoch[29199/30000], loss: 8.953943\n",
      "Epoch[29219/30000], loss: 8.953943\n",
      "Epoch[29239/30000], loss: 8.953943\n",
      "Epoch[29259/30000], loss: 8.953943\n",
      "Epoch[29279/30000], loss: 8.953943\n",
      "Epoch[29299/30000], loss: 8.953943\n",
      "Epoch[29319/30000], loss: 8.953943\n",
      "Epoch[29339/30000], loss: 8.953943\n",
      "Epoch[29359/30000], loss: 8.953943\n",
      "Epoch[29379/30000], loss: 8.953943\n",
      "Epoch[29399/30000], loss: 8.953943\n",
      "Epoch[29419/30000], loss: 8.953943\n",
      "Epoch[29439/30000], loss: 8.953943\n",
      "Epoch[29459/30000], loss: 8.953943\n",
      "Epoch[29479/30000], loss: 8.953943\n",
      "Epoch[29499/30000], loss: 8.953943\n",
      "Epoch[29519/30000], loss: 8.953943\n",
      "Epoch[29539/30000], loss: 8.953943\n",
      "Epoch[29559/30000], loss: 8.953943\n",
      "Epoch[29579/30000], loss: 8.953943\n",
      "Epoch[29599/30000], loss: 8.953943\n",
      "Epoch[29619/30000], loss: 8.953943\n",
      "Epoch[29639/30000], loss: 8.953943\n",
      "Epoch[29659/30000], loss: 8.953943\n",
      "Epoch[29679/30000], loss: 8.953943\n",
      "Epoch[29699/30000], loss: 8.953943\n",
      "Epoch[29719/30000], loss: 8.953943\n",
      "Epoch[29739/30000], loss: 8.953943\n",
      "Epoch[29759/30000], loss: 8.953943\n",
      "Epoch[29779/30000], loss: 8.953943\n",
      "Epoch[29799/30000], loss: 8.953943\n",
      "Epoch[29819/30000], loss: 8.953943\n",
      "Epoch[29839/30000], loss: 8.953943\n",
      "Epoch[29859/30000], loss: 8.953943\n",
      "Epoch[29879/30000], loss: 8.953943\n",
      "Epoch[29899/30000], loss: 8.953943\n",
      "Epoch[29919/30000], loss: 8.953943\n",
      "Epoch[29939/30000], loss: 8.953943\n",
      "Epoch[29959/30000], loss: 8.953943\n",
      "Epoch[29979/30000], loss: 8.953943\n",
      "Epoch[29999/30000], loss: 8.953943\n"
     ]
    },
    {
     "data": {
      "text/plain": "<Figure size 432x288 with 1 Axes>",
      "image/png": "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\n"
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "import torch\n",
    "from torch import nn\n",
    "from torch import optim\n",
    "import numpy as np\n",
    "from matplotlib import pyplot as plt\n",
    "from torch.autograd import Variable\n",
    "\n",
    "# 1. 定义数据\n",
    "# 准备数据\n",
    "data = np.loadtxt('data/ex1/ex1data1.txt', delimiter=',', dtype=np.float64)\n",
    "length = len(data[:, 0])\n",
    "print(length)\n",
    "# print(data)\n",
    "plt.rcParams[\"font.sans-serif\"] = [\"SimHei\"]\n",
    "plt.rcParams[\"axes.unicode_minus\"] = False\n",
    "# 需要转置变成97*1,的矩阵\n",
    "\n",
    "# 线性回归支持Float,不支持double\n",
    "x = torch.FloatTensor(data[:, 0].reshape(length, 1))\n",
    "y = torch.FloatTensor(data[:, 1].reshape(length, 1))\n",
    "# x = Variable(torch.from_numpy(data[:, 0]))\n",
    "# y = Variable(torch.from_numpy(data[:, 1]))\n",
    "\n",
    "\n",
    "#2 .定义模型\n",
    "class Lr(nn.Module):\n",
    "    def __init__(self):\n",
    "        super(Lr, self).__init__()\n",
    "        self.linear = nn.Linear(1, 1)\n",
    "\n",
    "    def forward(self, x):\n",
    "        out = self.linear(x)\n",
    "        return out\n",
    "\n",
    "\n",
    "# 2. 实例化模型，loss，和优化器\n",
    "model = Lr()\n",
    "# 定义损失函数\n",
    "criterion = nn.MSELoss()\n",
    "# 定义更新函数，lr为学习步长\n",
    "optimizer = optim.SGD(model.parameters(), lr=1e-3)\n",
    "\n",
    "#3. 训练模型\n",
    "for i in range(30000):\n",
    "    out = model(x)  #3.1 获取预测值\n",
    "    # loss = criterion(y,out) #3.2 计算损失\n",
    "    loss = criterion(y, out)\n",
    "    optimizer.zero_grad()  #3.3 梯度归零\n",
    "    loss.backward()  #3.4 计算梯度\n",
    "    optimizer.step()  # 3.5 更新梯度\n",
    "    if (i + 1) % 20 == 0:\n",
    "        print('Epoch[{}/{}], loss: {:.6f}'.format(i, 30000, loss.data))\n",
    "\n",
    "#4. 模型评估\n",
    "model.eval()  #设置模型为评估模式，即预测模式\n",
    "predict = model(x)\n",
    "predict = predict.data.numpy()\n",
    "plt.scatter(x.data.numpy(), y.data.numpy(), c=\"r\")\n",
    "plt.plot(x.data.numpy(), predict)\n",
    "plt.show()"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "tensor([[0.5938],\n",
      "        [0.4842],\n",
      "        [0.5859],\n",
      "        [0.7286],\n",
      "        [0.0626],\n",
      "        [0.0506],\n",
      "        [0.8836],\n",
      "        [0.6088],\n",
      "        [0.6643],\n",
      "        [0.2677],\n",
      "        [0.5526],\n",
      "        [0.7357],\n",
      "        [0.1786],\n",
      "        [0.8441],\n",
      "        [0.0491],\n",
      "        [0.5868],\n",
      "        [0.6336],\n",
      "        [0.7662],\n",
      "        [0.8659],\n",
      "        [0.6407],\n",
      "        [0.3293],\n",
      "        [0.0630],\n",
      "        [0.8215],\n",
      "        [0.1774],\n",
      "        [0.1518],\n",
      "        [0.1323],\n",
      "        [0.3608],\n",
      "        [0.7990],\n",
      "        [0.9818],\n",
      "        [0.8027],\n",
      "        [0.3556],\n",
      "        [0.2663],\n",
      "        [0.6796],\n",
      "        [0.7450],\n",
      "        [0.2409],\n",
      "        [0.4201],\n",
      "        [0.8830],\n",
      "        [0.3593],\n",
      "        [0.6201],\n",
      "        [0.6810],\n",
      "        [0.6124],\n",
      "        [0.2263],\n",
      "        [0.4000],\n",
      "        [0.0419],\n",
      "        [0.0933],\n",
      "        [0.7480],\n",
      "        [0.6267],\n",
      "        [0.1367],\n",
      "        [0.1919],\n",
      "        [0.7095]])\n",
      "torch.Size([50, 1])\n",
      "Epoch[19/30000], loss: 5.170710\n",
      "Epoch[39/30000], loss: 4.708441\n",
      "Epoch[59/30000], loss: 4.290209\n",
      "Epoch[79/30000], loss: 3.911803\n",
      "Epoch[99/30000], loss: 3.569419\n",
      "Epoch[119/30000], loss: 3.259612\n",
      "Epoch[139/30000], loss: 2.979270\n",
      "Epoch[159/30000], loss: 2.725575\n",
      "Epoch[179/30000], loss: 2.495982\n",
      "Epoch[199/30000], loss: 2.288186\n",
      "Epoch[219/30000], loss: 2.100106\n",
      "Epoch[239/30000], loss: 1.929856\n",
      "Epoch[259/30000], loss: 1.775734\n",
      "Epoch[279/30000], loss: 1.636198\n",
      "Epoch[299/30000], loss: 1.509855\n",
      "Epoch[319/30000], loss: 1.395443\n",
      "Epoch[339/30000], loss: 1.291823\n",
      "Epoch[359/30000], loss: 1.197964\n",
      "Epoch[379/30000], loss: 1.112934\n",
      "Epoch[399/30000], loss: 1.035889\n",
      "Epoch[419/30000], loss: 0.966067\n",
      "Epoch[439/30000], loss: 0.902778\n",
      "Epoch[459/30000], loss: 0.845398\n",
      "Epoch[479/30000], loss: 0.793362\n",
      "Epoch[499/30000], loss: 0.746161\n",
      "Epoch[519/30000], loss: 0.703333\n",
      "Epoch[539/30000], loss: 0.664460\n",
      "Epoch[559/30000], loss: 0.629167\n",
      "Epoch[579/30000], loss: 0.597109\n",
      "Epoch[599/30000], loss: 0.567980\n",
      "Epoch[619/30000], loss: 0.541499\n",
      "Epoch[639/30000], loss: 0.517415\n",
      "Epoch[659/30000], loss: 0.495498\n",
      "Epoch[679/30000], loss: 0.475543\n",
      "Epoch[699/30000], loss: 0.457362\n",
      "Epoch[719/30000], loss: 0.440787\n",
      "Epoch[739/30000], loss: 0.425664\n",
      "Epoch[759/30000], loss: 0.411855\n",
      "Epoch[779/30000], loss: 0.399236\n",
      "Epoch[799/30000], loss: 0.387693\n",
      "Epoch[819/30000], loss: 0.377124\n",
      "Epoch[839/30000], loss: 0.367436\n",
      "Epoch[859/30000], loss: 0.358547\n",
      "Epoch[879/30000], loss: 0.350380\n",
      "Epoch[899/30000], loss: 0.342866\n",
      "Epoch[919/30000], loss: 0.335945\n",
      "Epoch[939/30000], loss: 0.329559\n",
      "Epoch[959/30000], loss: 0.323659\n",
      "Epoch[979/30000], loss: 0.318198\n",
      "Epoch[999/30000], loss: 0.313135\n",
      "Epoch[1019/30000], loss: 0.308434\n",
      "Epoch[1039/30000], loss: 0.304059\n",
      "Epoch[1059/30000], loss: 0.299980\n",
      "Epoch[1079/30000], loss: 0.296169\n",
      "Epoch[1099/30000], loss: 0.292602\n",
      "Epoch[1119/30000], loss: 0.289255\n",
      "Epoch[1139/30000], loss: 0.286109\n",
      "Epoch[1159/30000], loss: 0.283145\n",
      "Epoch[1179/30000], loss: 0.280345\n",
      "Epoch[1199/30000], loss: 0.277695\n",
      "Epoch[1219/30000], loss: 0.275180\n",
      "Epoch[1239/30000], loss: 0.272790\n",
      "Epoch[1259/30000], loss: 0.270511\n",
      "Epoch[1279/30000], loss: 0.268335\n",
      "Epoch[1299/30000], loss: 0.266251\n",
      "Epoch[1319/30000], loss: 0.264252\n",
      "Epoch[1339/30000], loss: 0.262330\n",
      "Epoch[1359/30000], loss: 0.260478\n",
      "Epoch[1379/30000], loss: 0.258691\n",
      "Epoch[1399/30000], loss: 0.256962\n",
      "Epoch[1419/30000], loss: 0.255286\n",
      "Epoch[1439/30000], loss: 0.253659\n",
      "Epoch[1459/30000], loss: 0.252077\n",
      "Epoch[1479/30000], loss: 0.250536\n",
      "Epoch[1499/30000], loss: 0.249033\n",
      "Epoch[1519/30000], loss: 0.247564\n",
      "Epoch[1539/30000], loss: 0.246127\n",
      "Epoch[1559/30000], loss: 0.244719\n",
      "Epoch[1579/30000], loss: 0.243339\n",
      "Epoch[1599/30000], loss: 0.241983\n",
      "Epoch[1619/30000], loss: 0.240650\n",
      "Epoch[1639/30000], loss: 0.239339\n",
      "Epoch[1659/30000], loss: 0.238047\n",
      "Epoch[1679/30000], loss: 0.236774\n",
      "Epoch[1699/30000], loss: 0.235519\n",
      "Epoch[1719/30000], loss: 0.234279\n",
      "Epoch[1739/30000], loss: 0.233054\n",
      "Epoch[1759/30000], loss: 0.231844\n",
      "Epoch[1779/30000], loss: 0.230647\n",
      "Epoch[1799/30000], loss: 0.229462\n",
      "Epoch[1819/30000], loss: 0.228289\n",
      "Epoch[1839/30000], loss: 0.227127\n",
      "Epoch[1859/30000], loss: 0.225976\n",
      "Epoch[1879/30000], loss: 0.224835\n",
      "Epoch[1899/30000], loss: 0.223704\n",
      "Epoch[1919/30000], loss: 0.222581\n",
      "Epoch[1939/30000], loss: 0.221468\n",
      "Epoch[1959/30000], loss: 0.220362\n",
      "Epoch[1979/30000], loss: 0.219265\n",
      "Epoch[1999/30000], loss: 0.218176\n",
      "Epoch[2019/30000], loss: 0.217094\n",
      "Epoch[2039/30000], loss: 0.216020\n",
      "Epoch[2059/30000], loss: 0.214952\n",
      "Epoch[2079/30000], loss: 0.213891\n",
      "Epoch[2099/30000], loss: 0.212837\n",
      "Epoch[2119/30000], loss: 0.211790\n",
      "Epoch[2139/30000], loss: 0.210748\n",
      "Epoch[2159/30000], loss: 0.209713\n",
      "Epoch[2179/30000], loss: 0.208684\n",
      "Epoch[2199/30000], loss: 0.207661\n",
      "Epoch[2219/30000], loss: 0.206643\n",
      "Epoch[2239/30000], loss: 0.205632\n",
      "Epoch[2259/30000], loss: 0.204625\n",
      "Epoch[2279/30000], loss: 0.203625\n",
      "Epoch[2299/30000], loss: 0.202629\n",
      "Epoch[2319/30000], loss: 0.201640\n",
      "Epoch[2339/30000], loss: 0.200655\n",
      "Epoch[2359/30000], loss: 0.199675\n",
      "Epoch[2379/30000], loss: 0.198701\n",
      "Epoch[2399/30000], loss: 0.197732\n",
      "Epoch[2419/30000], loss: 0.196767\n",
      "Epoch[2439/30000], loss: 0.195808\n",
      "Epoch[2459/30000], loss: 0.194853\n",
      "Epoch[2479/30000], loss: 0.193904\n",
      "Epoch[2499/30000], loss: 0.192959\n",
      "Epoch[2519/30000], loss: 0.192019\n",
      "Epoch[2539/30000], loss: 0.191084\n",
      "Epoch[2559/30000], loss: 0.190153\n",
      "Epoch[2579/30000], loss: 0.189227\n",
      "Epoch[2599/30000], loss: 0.188306\n",
      "Epoch[2619/30000], loss: 0.187389\n",
      "Epoch[2639/30000], loss: 0.186477\n",
      "Epoch[2659/30000], loss: 0.185570\n",
      "Epoch[2679/30000], loss: 0.184667\n",
      "Epoch[2699/30000], loss: 0.183768\n",
      "Epoch[2719/30000], loss: 0.182874\n",
      "Epoch[2739/30000], loss: 0.181984\n",
      "Epoch[2759/30000], loss: 0.181099\n",
      "Epoch[2779/30000], loss: 0.180218\n",
      "Epoch[2799/30000], loss: 0.179341\n",
      "Epoch[2819/30000], loss: 0.178468\n",
      "Epoch[2839/30000], loss: 0.177600\n",
      "Epoch[2859/30000], loss: 0.176736\n",
      "Epoch[2879/30000], loss: 0.175877\n",
      "Epoch[2899/30000], loss: 0.175021\n",
      "Epoch[2919/30000], loss: 0.174170\n",
      "Epoch[2939/30000], loss: 0.173323\n",
      "Epoch[2959/30000], loss: 0.172480\n",
      "Epoch[2979/30000], loss: 0.171641\n",
      "Epoch[2999/30000], loss: 0.170806\n",
      "Epoch[3019/30000], loss: 0.169975\n",
      "Epoch[3039/30000], loss: 0.169149\n",
      "Epoch[3059/30000], loss: 0.168326\n",
      "Epoch[3079/30000], loss: 0.167507\n",
      "Epoch[3099/30000], loss: 0.166693\n",
      "Epoch[3119/30000], loss: 0.165882\n",
      "Epoch[3139/30000], loss: 0.165075\n",
      "Epoch[3159/30000], loss: 0.164273\n",
      "Epoch[3179/30000], loss: 0.163474\n",
      "Epoch[3199/30000], loss: 0.162679\n",
      "Epoch[3219/30000], loss: 0.161888\n",
      "Epoch[3239/30000], loss: 0.161100\n",
      "Epoch[3259/30000], loss: 0.160317\n",
      "Epoch[3279/30000], loss: 0.159537\n",
      "Epoch[3299/30000], loss: 0.158762\n",
      "Epoch[3319/30000], loss: 0.157990\n",
      "Epoch[3339/30000], loss: 0.157221\n",
      "Epoch[3359/30000], loss: 0.156457\n",
      "Epoch[3379/30000], loss: 0.155696\n",
      "Epoch[3399/30000], loss: 0.154939\n",
      "Epoch[3419/30000], loss: 0.154185\n",
      "Epoch[3439/30000], loss: 0.153436\n",
      "Epoch[3459/30000], loss: 0.152689\n",
      "Epoch[3479/30000], loss: 0.151947\n",
      "Epoch[3499/30000], loss: 0.151208\n",
      "Epoch[3519/30000], loss: 0.150473\n",
      "Epoch[3539/30000], loss: 0.149741\n",
      "Epoch[3559/30000], loss: 0.149013\n",
      "Epoch[3579/30000], loss: 0.148288\n",
      "Epoch[3599/30000], loss: 0.147567\n",
      "Epoch[3619/30000], loss: 0.146850\n",
      "Epoch[3639/30000], loss: 0.146136\n",
      "Epoch[3659/30000], loss: 0.145425\n",
      "Epoch[3679/30000], loss: 0.144718\n",
      "Epoch[3699/30000], loss: 0.144014\n",
      "Epoch[3719/30000], loss: 0.143314\n",
      "Epoch[3739/30000], loss: 0.142617\n",
      "Epoch[3759/30000], loss: 0.141923\n",
      "Epoch[3779/30000], loss: 0.141233\n",
      "Epoch[3799/30000], loss: 0.140546\n",
      "Epoch[3819/30000], loss: 0.139863\n",
      "Epoch[3839/30000], loss: 0.139183\n",
      "Epoch[3859/30000], loss: 0.138506\n",
      "Epoch[3879/30000], loss: 0.137833\n",
      "Epoch[3899/30000], loss: 0.137162\n",
      "Epoch[3919/30000], loss: 0.136495\n",
      "Epoch[3939/30000], loss: 0.135832\n",
      "Epoch[3959/30000], loss: 0.135171\n",
      "Epoch[3979/30000], loss: 0.134514\n",
      "Epoch[3999/30000], loss: 0.133860\n",
      "Epoch[4019/30000], loss: 0.133209\n",
      "Epoch[4039/30000], loss: 0.132561\n",
      "Epoch[4059/30000], loss: 0.131916\n",
      "Epoch[4079/30000], loss: 0.131275\n",
      "Epoch[4099/30000], loss: 0.130637\n",
      "Epoch[4119/30000], loss: 0.130001\n",
      "Epoch[4139/30000], loss: 0.129369\n",
      "Epoch[4159/30000], loss: 0.128740\n",
      "Epoch[4179/30000], loss: 0.128114\n",
      "Epoch[4199/30000], loss: 0.127491\n",
      "Epoch[4219/30000], loss: 0.126871\n",
      "Epoch[4239/30000], loss: 0.126254\n",
      "Epoch[4259/30000], loss: 0.125640\n",
      "Epoch[4279/30000], loss: 0.125029\n",
      "Epoch[4299/30000], loss: 0.124421\n",
      "Epoch[4319/30000], loss: 0.123816\n",
      "Epoch[4339/30000], loss: 0.123214\n",
      "Epoch[4359/30000], loss: 0.122615\n",
      "Epoch[4379/30000], loss: 0.122019\n",
      "Epoch[4399/30000], loss: 0.121426\n",
      "Epoch[4419/30000], loss: 0.120835\n",
      "Epoch[4439/30000], loss: 0.120248\n",
      "Epoch[4459/30000], loss: 0.119663\n",
      "Epoch[4479/30000], loss: 0.119081\n",
      "Epoch[4499/30000], loss: 0.118502\n",
      "Epoch[4519/30000], loss: 0.117926\n",
      "Epoch[4539/30000], loss: 0.117352\n",
      "Epoch[4559/30000], loss: 0.116782\n",
      "Epoch[4579/30000], loss: 0.116214\n",
      "Epoch[4599/30000], loss: 0.115649\n",
      "Epoch[4619/30000], loss: 0.115086\n",
      "Epoch[4639/30000], loss: 0.114527\n",
      "Epoch[4659/30000], loss: 0.113970\n",
      "Epoch[4679/30000], loss: 0.113415\n",
      "Epoch[4699/30000], loss: 0.112864\n",
      "Epoch[4719/30000], loss: 0.112315\n",
      "Epoch[4739/30000], loss: 0.111769\n",
      "Epoch[4759/30000], loss: 0.111225\n",
      "Epoch[4779/30000], loss: 0.110685\n",
      "Epoch[4799/30000], loss: 0.110146\n",
      "Epoch[4819/30000], loss: 0.109611\n",
      "Epoch[4839/30000], loss: 0.109078\n",
      "Epoch[4859/30000], loss: 0.108547\n",
      "Epoch[4879/30000], loss: 0.108020\n",
      "Epoch[4899/30000], loss: 0.107494\n",
      "Epoch[4919/30000], loss: 0.106972\n",
      "Epoch[4939/30000], loss: 0.106451\n",
      "Epoch[4959/30000], loss: 0.105934\n",
      "Epoch[4979/30000], loss: 0.105419\n",
      "Epoch[4999/30000], loss: 0.104906\n",
      "Epoch[5019/30000], loss: 0.104396\n",
      "Epoch[5039/30000], loss: 0.103888\n",
      "Epoch[5059/30000], loss: 0.103383\n",
      "Epoch[5079/30000], loss: 0.102880\n",
      "Epoch[5099/30000], loss: 0.102380\n",
      "Epoch[5119/30000], loss: 0.101882\n",
      "Epoch[5139/30000], loss: 0.101387\n",
      "Epoch[5159/30000], loss: 0.100894\n",
      "Epoch[5179/30000], loss: 0.100403\n",
      "Epoch[5199/30000], loss: 0.099915\n",
      "Epoch[5219/30000], loss: 0.099429\n",
      "Epoch[5239/30000], loss: 0.098946\n",
      "Epoch[5259/30000], loss: 0.098465\n",
      "Epoch[5279/30000], loss: 0.097986\n",
      "Epoch[5299/30000], loss: 0.097509\n",
      "Epoch[5319/30000], loss: 0.097035\n",
      "Epoch[5339/30000], loss: 0.096563\n",
      "Epoch[5359/30000], loss: 0.096094\n",
      "Epoch[5379/30000], loss: 0.095626\n",
      "Epoch[5399/30000], loss: 0.095161\n",
      "Epoch[5419/30000], loss: 0.094699\n",
      "Epoch[5439/30000], loss: 0.094238\n",
      "Epoch[5459/30000], loss: 0.093780\n",
      "Epoch[5479/30000], loss: 0.093324\n",
      "Epoch[5499/30000], loss: 0.092870\n",
      "Epoch[5519/30000], loss: 0.092419\n",
      "Epoch[5539/30000], loss: 0.091969\n",
      "Epoch[5559/30000], loss: 0.091522\n",
      "Epoch[5579/30000], loss: 0.091077\n",
      "Epoch[5599/30000], loss: 0.090634\n",
      "Epoch[5619/30000], loss: 0.090193\n",
      "Epoch[5639/30000], loss: 0.089755\n",
      "Epoch[5659/30000], loss: 0.089318\n",
      "Epoch[5679/30000], loss: 0.088884\n",
      "Epoch[5699/30000], loss: 0.088452\n",
      "Epoch[5719/30000], loss: 0.088022\n",
      "Epoch[5739/30000], loss: 0.087594\n",
      "Epoch[5759/30000], loss: 0.087168\n",
      "Epoch[5779/30000], loss: 0.086744\n",
      "Epoch[5799/30000], loss: 0.086322\n",
      "Epoch[5819/30000], loss: 0.085902\n",
      "Epoch[5839/30000], loss: 0.085484\n",
      "Epoch[5859/30000], loss: 0.085069\n",
      "Epoch[5879/30000], loss: 0.084655\n",
      "Epoch[5899/30000], loss: 0.084243\n",
      "Epoch[5919/30000], loss: 0.083834\n",
      "Epoch[5939/30000], loss: 0.083426\n",
      "Epoch[5959/30000], loss: 0.083020\n",
      "Epoch[5979/30000], loss: 0.082617\n",
      "Epoch[5999/30000], loss: 0.082215\n",
      "Epoch[6019/30000], loss: 0.081815\n",
      "Epoch[6039/30000], loss: 0.081417\n",
      "Epoch[6059/30000], loss: 0.081021\n",
      "Epoch[6079/30000], loss: 0.080628\n",
      "Epoch[6099/30000], loss: 0.080235\n",
      "Epoch[6119/30000], loss: 0.079845\n",
      "Epoch[6139/30000], loss: 0.079457\n",
      "Epoch[6159/30000], loss: 0.079071\n",
      "Epoch[6179/30000], loss: 0.078686\n",
      "Epoch[6199/30000], loss: 0.078304\n",
      "Epoch[6219/30000], loss: 0.077923\n",
      "Epoch[6239/30000], loss: 0.077544\n",
      "Epoch[6259/30000], loss: 0.077167\n",
      "Epoch[6279/30000], loss: 0.076792\n",
      "Epoch[6299/30000], loss: 0.076418\n",
      "Epoch[6319/30000], loss: 0.076046\n",
      "Epoch[6339/30000], loss: 0.075677\n",
      "Epoch[6359/30000], loss: 0.075309\n",
      "Epoch[6379/30000], loss: 0.074943\n",
      "Epoch[6399/30000], loss: 0.074578\n",
      "Epoch[6419/30000], loss: 0.074215\n",
      "Epoch[6439/30000], loss: 0.073855\n",
      "Epoch[6459/30000], loss: 0.073495\n",
      "Epoch[6479/30000], loss: 0.073138\n",
      "Epoch[6499/30000], loss: 0.072782\n",
      "Epoch[6519/30000], loss: 0.072428\n",
      "Epoch[6539/30000], loss: 0.072076\n",
      "Epoch[6559/30000], loss: 0.071726\n",
      "Epoch[6579/30000], loss: 0.071377\n",
      "Epoch[6599/30000], loss: 0.071030\n",
      "Epoch[6619/30000], loss: 0.070685\n",
      "Epoch[6639/30000], loss: 0.070341\n",
      "Epoch[6659/30000], loss: 0.069999\n",
      "Epoch[6679/30000], loss: 0.069658\n",
      "Epoch[6699/30000], loss: 0.069320\n",
      "Epoch[6719/30000], loss: 0.068983\n",
      "Epoch[6739/30000], loss: 0.068647\n",
      "Epoch[6759/30000], loss: 0.068313\n",
      "Epoch[6779/30000], loss: 0.067981\n",
      "Epoch[6799/30000], loss: 0.067651\n",
      "Epoch[6819/30000], loss: 0.067322\n",
      "Epoch[6839/30000], loss: 0.066994\n",
      "Epoch[6859/30000], loss: 0.066668\n",
      "Epoch[6879/30000], loss: 0.066344\n",
      "Epoch[6899/30000], loss: 0.066022\n",
      "Epoch[6919/30000], loss: 0.065701\n",
      "Epoch[6939/30000], loss: 0.065381\n",
      "Epoch[6959/30000], loss: 0.065063\n",
      "Epoch[6979/30000], loss: 0.064747\n",
      "Epoch[6999/30000], loss: 0.064432\n",
      "Epoch[7019/30000], loss: 0.064119\n",
      "Epoch[7039/30000], loss: 0.063807\n",
      "Epoch[7059/30000], loss: 0.063497\n",
      "Epoch[7079/30000], loss: 0.063188\n",
      "Epoch[7099/30000], loss: 0.062881\n",
      "Epoch[7119/30000], loss: 0.062575\n",
      "Epoch[7139/30000], loss: 0.062271\n",
      "Epoch[7159/30000], loss: 0.061968\n",
      "Epoch[7179/30000], loss: 0.061666\n",
      "Epoch[7199/30000], loss: 0.061367\n",
      "Epoch[7219/30000], loss: 0.061068\n",
      "Epoch[7239/30000], loss: 0.060771\n",
      "Epoch[7259/30000], loss: 0.060476\n",
      "Epoch[7279/30000], loss: 0.060182\n",
      "Epoch[7299/30000], loss: 0.059889\n",
      "Epoch[7319/30000], loss: 0.059598\n",
      "Epoch[7339/30000], loss: 0.059308\n",
      "Epoch[7359/30000], loss: 0.059020\n",
      "Epoch[7379/30000], loss: 0.058733\n",
      "Epoch[7399/30000], loss: 0.058447\n",
      "Epoch[7419/30000], loss: 0.058163\n",
      "Epoch[7439/30000], loss: 0.057880\n",
      "Epoch[7459/30000], loss: 0.057599\n",
      "Epoch[7479/30000], loss: 0.057319\n",
      "Epoch[7499/30000], loss: 0.057040\n",
      "Epoch[7519/30000], loss: 0.056762\n",
      "Epoch[7539/30000], loss: 0.056486\n",
      "Epoch[7559/30000], loss: 0.056212\n",
      "Epoch[7579/30000], loss: 0.055938\n",
      "Epoch[7599/30000], loss: 0.055666\n",
      "Epoch[7619/30000], loss: 0.055396\n",
      "Epoch[7639/30000], loss: 0.055126\n",
      "Epoch[7659/30000], loss: 0.054858\n",
      "Epoch[7679/30000], loss: 0.054592\n",
      "Epoch[7699/30000], loss: 0.054326\n",
      "Epoch[7719/30000], loss: 0.054062\n",
      "Epoch[7739/30000], loss: 0.053799\n",
      "Epoch[7759/30000], loss: 0.053537\n",
      "Epoch[7779/30000], loss: 0.053277\n",
      "Epoch[7799/30000], loss: 0.053018\n",
      "Epoch[7819/30000], loss: 0.052760\n",
      "Epoch[7839/30000], loss: 0.052504\n",
      "Epoch[7859/30000], loss: 0.052248\n",
      "Epoch[7879/30000], loss: 0.051994\n",
      "Epoch[7899/30000], loss: 0.051741\n",
      "Epoch[7919/30000], loss: 0.051490\n",
      "Epoch[7939/30000], loss: 0.051239\n",
      "Epoch[7959/30000], loss: 0.050990\n",
      "Epoch[7979/30000], loss: 0.050742\n",
      "Epoch[7999/30000], loss: 0.050496\n",
      "Epoch[8019/30000], loss: 0.050250\n",
      "Epoch[8039/30000], loss: 0.050006\n",
      "Epoch[8059/30000], loss: 0.049763\n",
      "Epoch[8079/30000], loss: 0.049521\n",
      "Epoch[8099/30000], loss: 0.049280\n",
      "Epoch[8119/30000], loss: 0.049040\n",
      "Epoch[8139/30000], loss: 0.048802\n",
      "Epoch[8159/30000], loss: 0.048564\n",
      "Epoch[8179/30000], loss: 0.048328\n",
      "Epoch[8199/30000], loss: 0.048093\n",
      "Epoch[8219/30000], loss: 0.047859\n",
      "Epoch[8239/30000], loss: 0.047627\n",
      "Epoch[8259/30000], loss: 0.047395\n",
      "Epoch[8279/30000], loss: 0.047165\n",
      "Epoch[8299/30000], loss: 0.046935\n",
      "Epoch[8319/30000], loss: 0.046707\n",
      "Epoch[8339/30000], loss: 0.046480\n",
      "Epoch[8359/30000], loss: 0.046254\n",
      "Epoch[8379/30000], loss: 0.046029\n",
      "Epoch[8399/30000], loss: 0.045805\n",
      "Epoch[8419/30000], loss: 0.045582\n",
      "Epoch[8439/30000], loss: 0.045361\n",
      "Epoch[8459/30000], loss: 0.045140\n",
      "Epoch[8479/30000], loss: 0.044921\n",
      "Epoch[8499/30000], loss: 0.044702\n",
      "Epoch[8519/30000], loss: 0.044485\n",
      "Epoch[8539/30000], loss: 0.044269\n",
      "Epoch[8559/30000], loss: 0.044053\n",
      "Epoch[8579/30000], loss: 0.043839\n",
      "Epoch[8599/30000], loss: 0.043626\n",
      "Epoch[8619/30000], loss: 0.043414\n",
      "Epoch[8639/30000], loss: 0.043203\n",
      "Epoch[8659/30000], loss: 0.042993\n",
      "Epoch[8679/30000], loss: 0.042783\n",
      "Epoch[8699/30000], loss: 0.042575\n",
      "Epoch[8719/30000], loss: 0.042368\n",
      "Epoch[8739/30000], loss: 0.042162\n",
      "Epoch[8759/30000], loss: 0.041957\n",
      "Epoch[8779/30000], loss: 0.041753\n",
      "Epoch[8799/30000], loss: 0.041550\n",
      "Epoch[8819/30000], loss: 0.041348\n",
      "Epoch[8839/30000], loss: 0.041147\n",
      "Epoch[8859/30000], loss: 0.040947\n",
      "Epoch[8879/30000], loss: 0.040748\n",
      "Epoch[8899/30000], loss: 0.040550\n",
      "Epoch[8919/30000], loss: 0.040353\n",
      "Epoch[8939/30000], loss: 0.040156\n",
      "Epoch[8959/30000], loss: 0.039961\n",
      "Epoch[8979/30000], loss: 0.039767\n",
      "Epoch[8999/30000], loss: 0.039573\n",
      "Epoch[9019/30000], loss: 0.039381\n",
      "Epoch[9039/30000], loss: 0.039190\n",
      "Epoch[9059/30000], loss: 0.038999\n",
      "Epoch[9079/30000], loss: 0.038809\n",
      "Epoch[9099/30000], loss: 0.038621\n",
      "Epoch[9119/30000], loss: 0.038433\n",
      "Epoch[9139/30000], loss: 0.038246\n",
      "Epoch[9159/30000], loss: 0.038060\n",
      "Epoch[9179/30000], loss: 0.037875\n",
      "Epoch[9199/30000], loss: 0.037691\n",
      "Epoch[9219/30000], loss: 0.037507\n",
      "Epoch[9239/30000], loss: 0.037325\n",
      "Epoch[9259/30000], loss: 0.037144\n",
      "Epoch[9279/30000], loss: 0.036963\n",
      "Epoch[9299/30000], loss: 0.036783\n",
      "Epoch[9319/30000], loss: 0.036604\n",
      "Epoch[9339/30000], loss: 0.036426\n",
      "Epoch[9359/30000], loss: 0.036249\n",
      "Epoch[9379/30000], loss: 0.036073\n",
      "Epoch[9399/30000], loss: 0.035898\n",
      "Epoch[9419/30000], loss: 0.035723\n",
      "Epoch[9439/30000], loss: 0.035549\n",
      "Epoch[9459/30000], loss: 0.035376\n",
      "Epoch[9479/30000], loss: 0.035204\n",
      "Epoch[9499/30000], loss: 0.035033\n",
      "Epoch[9519/30000], loss: 0.034863\n",
      "Epoch[9539/30000], loss: 0.034693\n",
      "Epoch[9559/30000], loss: 0.034525\n",
      "Epoch[9579/30000], loss: 0.034357\n",
      "Epoch[9599/30000], loss: 0.034190\n",
      "Epoch[9619/30000], loss: 0.034023\n",
      "Epoch[9639/30000], loss: 0.033858\n",
      "Epoch[9659/30000], loss: 0.033693\n",
      "Epoch[9679/30000], loss: 0.033530\n",
      "Epoch[9699/30000], loss: 0.033366\n",
      "Epoch[9719/30000], loss: 0.033204\n",
      "Epoch[9739/30000], loss: 0.033043\n",
      "Epoch[9759/30000], loss: 0.032882\n",
      "Epoch[9779/30000], loss: 0.032722\n",
      "Epoch[9799/30000], loss: 0.032563\n",
      "Epoch[9819/30000], loss: 0.032405\n",
      "Epoch[9839/30000], loss: 0.032247\n",
      "Epoch[9859/30000], loss: 0.032090\n",
      "Epoch[9879/30000], loss: 0.031934\n",
      "Epoch[9899/30000], loss: 0.031779\n",
      "Epoch[9919/30000], loss: 0.031625\n",
      "Epoch[9939/30000], loss: 0.031471\n",
      "Epoch[9959/30000], loss: 0.031318\n",
      "Epoch[9979/30000], loss: 0.031165\n",
      "Epoch[9999/30000], loss: 0.031014\n",
      "Epoch[10019/30000], loss: 0.030863\n",
      "Epoch[10039/30000], loss: 0.030713\n",
      "Epoch[10059/30000], loss: 0.030564\n",
      "Epoch[10079/30000], loss: 0.030415\n",
      "Epoch[10099/30000], loss: 0.030267\n",
      "Epoch[10119/30000], loss: 0.030120\n",
      "Epoch[10139/30000], loss: 0.029974\n",
      "Epoch[10159/30000], loss: 0.029828\n",
      "Epoch[10179/30000], loss: 0.029683\n",
      "Epoch[10199/30000], loss: 0.029538\n",
      "Epoch[10219/30000], loss: 0.029395\n",
      "Epoch[10239/30000], loss: 0.029252\n",
      "Epoch[10259/30000], loss: 0.029110\n",
      "Epoch[10279/30000], loss: 0.028968\n",
      "Epoch[10299/30000], loss: 0.028827\n",
      "Epoch[10319/30000], loss: 0.028687\n",
      "Epoch[10339/30000], loss: 0.028547\n",
      "Epoch[10359/30000], loss: 0.028409\n",
      "Epoch[10379/30000], loss: 0.028271\n",
      "Epoch[10399/30000], loss: 0.028133\n",
      "Epoch[10419/30000], loss: 0.027996\n",
      "Epoch[10439/30000], loss: 0.027860\n",
      "Epoch[10459/30000], loss: 0.027725\n",
      "Epoch[10479/30000], loss: 0.027590\n",
      "Epoch[10499/30000], loss: 0.027456\n",
      "Epoch[10519/30000], loss: 0.027322\n",
      "Epoch[10539/30000], loss: 0.027189\n",
      "Epoch[10559/30000], loss: 0.027057\n",
      "Epoch[10579/30000], loss: 0.026926\n",
      "Epoch[10599/30000], loss: 0.026795\n",
      "Epoch[10619/30000], loss: 0.026664\n",
      "Epoch[10639/30000], loss: 0.026535\n",
      "Epoch[10659/30000], loss: 0.026406\n",
      "Epoch[10679/30000], loss: 0.026277\n",
      "Epoch[10699/30000], loss: 0.026149\n",
      "Epoch[10719/30000], loss: 0.026022\n",
      "Epoch[10739/30000], loss: 0.025896\n",
      "Epoch[10759/30000], loss: 0.025770\n",
      "Epoch[10779/30000], loss: 0.025645\n",
      "Epoch[10799/30000], loss: 0.025520\n",
      "Epoch[10819/30000], loss: 0.025396\n",
      "Epoch[10839/30000], loss: 0.025272\n",
      "Epoch[10859/30000], loss: 0.025149\n",
      "Epoch[10879/30000], loss: 0.025027\n",
      "Epoch[10899/30000], loss: 0.024905\n",
      "Epoch[10919/30000], loss: 0.024784\n",
      "Epoch[10939/30000], loss: 0.024664\n",
      "Epoch[10959/30000], loss: 0.024544\n",
      "Epoch[10979/30000], loss: 0.024425\n",
      "Epoch[10999/30000], loss: 0.024306\n",
      "Epoch[11019/30000], loss: 0.024188\n",
      "Epoch[11039/30000], loss: 0.024070\n",
      "Epoch[11059/30000], loss: 0.023953\n",
      "Epoch[11079/30000], loss: 0.023836\n",
      "Epoch[11099/30000], loss: 0.023721\n",
      "Epoch[11119/30000], loss: 0.023605\n",
      "Epoch[11139/30000], loss: 0.023490\n",
      "Epoch[11159/30000], loss: 0.023376\n",
      "Epoch[11179/30000], loss: 0.023262\n",
      "Epoch[11199/30000], loss: 0.023149\n",
      "Epoch[11219/30000], loss: 0.023037\n",
      "Epoch[11239/30000], loss: 0.022925\n",
      "Epoch[11259/30000], loss: 0.022813\n",
      "Epoch[11279/30000], loss: 0.022702\n",
      "Epoch[11299/30000], loss: 0.022592\n",
      "Epoch[11319/30000], loss: 0.022482\n",
      "Epoch[11339/30000], loss: 0.022373\n",
      "Epoch[11359/30000], loss: 0.022264\n",
      "Epoch[11379/30000], loss: 0.022156\n",
      "Epoch[11399/30000], loss: 0.022048\n",
      "Epoch[11419/30000], loss: 0.021941\n",
      "Epoch[11439/30000], loss: 0.021834\n",
      "Epoch[11459/30000], loss: 0.021728\n",
      "Epoch[11479/30000], loss: 0.021622\n",
      "Epoch[11499/30000], loss: 0.021517\n",
      "Epoch[11519/30000], loss: 0.021413\n",
      "Epoch[11539/30000], loss: 0.021308\n",
      "Epoch[11559/30000], loss: 0.021205\n",
      "Epoch[11579/30000], loss: 0.021102\n",
      "Epoch[11599/30000], loss: 0.020999\n",
      "Epoch[11619/30000], loss: 0.020897\n",
      "Epoch[11639/30000], loss: 0.020795\n",
      "Epoch[11659/30000], loss: 0.020694\n",
      "Epoch[11679/30000], loss: 0.020594\n",
      "Epoch[11699/30000], loss: 0.020493\n",
      "Epoch[11719/30000], loss: 0.020394\n",
      "Epoch[11739/30000], loss: 0.020295\n",
      "Epoch[11759/30000], loss: 0.020196\n",
      "Epoch[11779/30000], loss: 0.020098\n",
      "Epoch[11799/30000], loss: 0.020000\n",
      "Epoch[11819/30000], loss: 0.019903\n",
      "Epoch[11839/30000], loss: 0.019806\n",
      "Epoch[11859/30000], loss: 0.019710\n",
      "Epoch[11879/30000], loss: 0.019614\n",
      "Epoch[11899/30000], loss: 0.019518\n",
      "Epoch[11919/30000], loss: 0.019424\n",
      "Epoch[11939/30000], loss: 0.019329\n",
      "Epoch[11959/30000], loss: 0.019235\n",
      "Epoch[11979/30000], loss: 0.019142\n",
      "Epoch[11999/30000], loss: 0.019048\n",
      "Epoch[12019/30000], loss: 0.018956\n",
      "Epoch[12039/30000], loss: 0.018864\n",
      "Epoch[12059/30000], loss: 0.018772\n",
      "Epoch[12079/30000], loss: 0.018681\n",
      "Epoch[12099/30000], loss: 0.018590\n",
      "Epoch[12119/30000], loss: 0.018499\n",
      "Epoch[12139/30000], loss: 0.018409\n",
      "Epoch[12159/30000], loss: 0.018320\n",
      "Epoch[12179/30000], loss: 0.018231\n",
      "Epoch[12199/30000], loss: 0.018142\n",
      "Epoch[12219/30000], loss: 0.018054\n",
      "Epoch[12239/30000], loss: 0.017966\n",
      "Epoch[12259/30000], loss: 0.017879\n",
      "Epoch[12279/30000], loss: 0.017792\n",
      "Epoch[12299/30000], loss: 0.017705\n",
      "Epoch[12319/30000], loss: 0.017619\n",
      "Epoch[12339/30000], loss: 0.017534\n",
      "Epoch[12359/30000], loss: 0.017448\n",
      "Epoch[12379/30000], loss: 0.017364\n",
      "Epoch[12399/30000], loss: 0.017279\n",
      "Epoch[12419/30000], loss: 0.017195\n",
      "Epoch[12439/30000], loss: 0.017111\n",
      "Epoch[12459/30000], loss: 0.017028\n",
      "Epoch[12479/30000], loss: 0.016945\n",
      "Epoch[12499/30000], loss: 0.016863\n",
      "Epoch[12519/30000], loss: 0.016781\n",
      "Epoch[12539/30000], loss: 0.016699\n",
      "Epoch[12559/30000], loss: 0.016618\n",
      "Epoch[12579/30000], loss: 0.016537\n",
      "Epoch[12599/30000], loss: 0.016457\n",
      "Epoch[12619/30000], loss: 0.016377\n",
      "Epoch[12639/30000], loss: 0.016297\n",
      "Epoch[12659/30000], loss: 0.016218\n",
      "Epoch[12679/30000], loss: 0.016139\n",
      "Epoch[12699/30000], loss: 0.016061\n",
      "Epoch[12719/30000], loss: 0.015983\n",
      "Epoch[12739/30000], loss: 0.015905\n",
      "Epoch[12759/30000], loss: 0.015828\n",
      "Epoch[12779/30000], loss: 0.015751\n",
      "Epoch[12799/30000], loss: 0.015674\n",
      "Epoch[12819/30000], loss: 0.015598\n",
      "Epoch[12839/30000], loss: 0.015522\n",
      "Epoch[12859/30000], loss: 0.015447\n",
      "Epoch[12879/30000], loss: 0.015371\n",
      "Epoch[12899/30000], loss: 0.015297\n",
      "Epoch[12919/30000], loss: 0.015222\n",
      "Epoch[12939/30000], loss: 0.015148\n",
      "Epoch[12959/30000], loss: 0.015075\n",
      "Epoch[12979/30000], loss: 0.015001\n",
      "Epoch[12999/30000], loss: 0.014928\n",
      "Epoch[13019/30000], loss: 0.014856\n",
      "Epoch[13039/30000], loss: 0.014783\n",
      "Epoch[13059/30000], loss: 0.014712\n",
      "Epoch[13079/30000], loss: 0.014640\n",
      "Epoch[13099/30000], loss: 0.014569\n",
      "Epoch[13119/30000], loss: 0.014498\n",
      "Epoch[13139/30000], loss: 0.014428\n",
      "Epoch[13159/30000], loss: 0.014357\n",
      "Epoch[13179/30000], loss: 0.014288\n",
      "Epoch[13199/30000], loss: 0.014218\n",
      "Epoch[13219/30000], loss: 0.014149\n",
      "Epoch[13239/30000], loss: 0.014080\n",
      "Epoch[13259/30000], loss: 0.014012\n",
      "Epoch[13279/30000], loss: 0.013944\n",
      "Epoch[13299/30000], loss: 0.013876\n",
      "Epoch[13319/30000], loss: 0.013808\n",
      "Epoch[13339/30000], loss: 0.013741\n",
      "Epoch[13359/30000], loss: 0.013674\n",
      "Epoch[13379/30000], loss: 0.013608\n",
      "Epoch[13399/30000], loss: 0.013542\n",
      "Epoch[13419/30000], loss: 0.013476\n",
      "Epoch[13439/30000], loss: 0.013410\n",
      "Epoch[13459/30000], loss: 0.013345\n",
      "Epoch[13479/30000], loss: 0.013280\n",
      "Epoch[13499/30000], loss: 0.013216\n",
      "Epoch[13519/30000], loss: 0.013151\n",
      "Epoch[13539/30000], loss: 0.013087\n",
      "Epoch[13559/30000], loss: 0.013024\n",
      "Epoch[13579/30000], loss: 0.012960\n",
      "Epoch[13599/30000], loss: 0.012897\n",
      "Epoch[13619/30000], loss: 0.012835\n",
      "Epoch[13639/30000], loss: 0.012772\n",
      "Epoch[13659/30000], loss: 0.012710\n",
      "Epoch[13679/30000], loss: 0.012648\n",
      "Epoch[13699/30000], loss: 0.012587\n",
      "Epoch[13719/30000], loss: 0.012526\n",
      "Epoch[13739/30000], loss: 0.012465\n",
      "Epoch[13759/30000], loss: 0.012404\n",
      "Epoch[13779/30000], loss: 0.012344\n",
      "Epoch[13799/30000], loss: 0.012284\n",
      "Epoch[13819/30000], loss: 0.012224\n",
      "Epoch[13839/30000], loss: 0.012165\n",
      "Epoch[13859/30000], loss: 0.012105\n",
      "Epoch[13879/30000], loss: 0.012047\n",
      "Epoch[13899/30000], loss: 0.011988\n",
      "Epoch[13919/30000], loss: 0.011930\n",
      "Epoch[13939/30000], loss: 0.011872\n",
      "Epoch[13959/30000], loss: 0.011814\n",
      "Epoch[13979/30000], loss: 0.011757\n",
      "Epoch[13999/30000], loss: 0.011699\n",
      "Epoch[14019/30000], loss: 0.011642\n",
      "Epoch[14039/30000], loss: 0.011586\n",
      "Epoch[14059/30000], loss: 0.011530\n",
      "Epoch[14079/30000], loss: 0.011473\n",
      "Epoch[14099/30000], loss: 0.011418\n",
      "Epoch[14119/30000], loss: 0.011362\n",
      "Epoch[14139/30000], loss: 0.011307\n",
      "Epoch[14159/30000], loss: 0.011252\n",
      "Epoch[14179/30000], loss: 0.011197\n",
      "Epoch[14199/30000], loss: 0.011143\n",
      "Epoch[14219/30000], loss: 0.011089\n",
      "Epoch[14239/30000], loss: 0.011035\n",
      "Epoch[14259/30000], loss: 0.010981\n",
      "Epoch[14279/30000], loss: 0.010928\n",
      "Epoch[14299/30000], loss: 0.010874\n",
      "Epoch[14319/30000], loss: 0.010822\n",
      "Epoch[14339/30000], loss: 0.010769\n",
      "Epoch[14359/30000], loss: 0.010717\n",
      "Epoch[14379/30000], loss: 0.010664\n",
      "Epoch[14399/30000], loss: 0.010613\n",
      "Epoch[14419/30000], loss: 0.010561\n",
      "Epoch[14439/30000], loss: 0.010510\n",
      "Epoch[14459/30000], loss: 0.010459\n",
      "Epoch[14479/30000], loss: 0.010408\n",
      "Epoch[14499/30000], loss: 0.010357\n",
      "Epoch[14519/30000], loss: 0.010307\n",
      "Epoch[14539/30000], loss: 0.010257\n",
      "Epoch[14559/30000], loss: 0.010207\n",
      "Epoch[14579/30000], loss: 0.010157\n",
      "Epoch[14599/30000], loss: 0.010108\n",
      "Epoch[14619/30000], loss: 0.010059\n",
      "Epoch[14639/30000], loss: 0.010010\n",
      "Epoch[14659/30000], loss: 0.009961\n",
      "Epoch[14679/30000], loss: 0.009913\n",
      "Epoch[14699/30000], loss: 0.009864\n",
      "Epoch[14719/30000], loss: 0.009816\n",
      "Epoch[14739/30000], loss: 0.009769\n",
      "Epoch[14759/30000], loss: 0.009721\n",
      "Epoch[14779/30000], loss: 0.009674\n",
      "Epoch[14799/30000], loss: 0.009627\n",
      "Epoch[14819/30000], loss: 0.009580\n",
      "Epoch[14839/30000], loss: 0.009533\n",
      "Epoch[14859/30000], loss: 0.009487\n",
      "Epoch[14879/30000], loss: 0.009441\n",
      "Epoch[14899/30000], loss: 0.009395\n",
      "Epoch[14919/30000], loss: 0.009349\n",
      "Epoch[14939/30000], loss: 0.009304\n",
      "Epoch[14959/30000], loss: 0.009259\n",
      "Epoch[14979/30000], loss: 0.009214\n",
      "Epoch[14999/30000], loss: 0.009169\n",
      "Epoch[15019/30000], loss: 0.009124\n",
      "Epoch[15039/30000], loss: 0.009080\n",
      "Epoch[15059/30000], loss: 0.009036\n",
      "Epoch[15079/30000], loss: 0.008992\n",
      "Epoch[15099/30000], loss: 0.008948\n",
      "Epoch[15119/30000], loss: 0.008905\n",
      "Epoch[15139/30000], loss: 0.008861\n",
      "Epoch[15159/30000], loss: 0.008818\n",
      "Epoch[15179/30000], loss: 0.008775\n",
      "Epoch[15199/30000], loss: 0.008733\n",
      "Epoch[15219/30000], loss: 0.008690\n",
      "Epoch[15239/30000], loss: 0.008648\n",
      "Epoch[15259/30000], loss: 0.008606\n",
      "Epoch[15279/30000], loss: 0.008564\n",
      "Epoch[15299/30000], loss: 0.008522\n",
      "Epoch[15319/30000], loss: 0.008481\n",
      "Epoch[15339/30000], loss: 0.008440\n",
      "Epoch[15359/30000], loss: 0.008399\n",
      "Epoch[15379/30000], loss: 0.008358\n",
      "Epoch[15399/30000], loss: 0.008317\n",
      "Epoch[15419/30000], loss: 0.008277\n",
      "Epoch[15439/30000], loss: 0.008236\n",
      "Epoch[15459/30000], loss: 0.008196\n",
      "Epoch[15479/30000], loss: 0.008157\n",
      "Epoch[15499/30000], loss: 0.008117\n",
      "Epoch[15519/30000], loss: 0.008077\n",
      "Epoch[15539/30000], loss: 0.008038\n",
      "Epoch[15559/30000], loss: 0.007999\n",
      "Epoch[15579/30000], loss: 0.007960\n",
      "Epoch[15599/30000], loss: 0.007921\n",
      "Epoch[15619/30000], loss: 0.007883\n",
      "Epoch[15639/30000], loss: 0.007845\n",
      "Epoch[15659/30000], loss: 0.007806\n",
      "Epoch[15679/30000], loss: 0.007769\n",
      "Epoch[15699/30000], loss: 0.007731\n",
      "Epoch[15719/30000], loss: 0.007693\n",
      "Epoch[15739/30000], loss: 0.007656\n",
      "Epoch[15759/30000], loss: 0.007618\n",
      "Epoch[15779/30000], loss: 0.007581\n",
      "Epoch[15799/30000], loss: 0.007545\n",
      "Epoch[15819/30000], loss: 0.007508\n",
      "Epoch[15839/30000], loss: 0.007471\n",
      "Epoch[15859/30000], loss: 0.007435\n",
      "Epoch[15879/30000], loss: 0.007399\n",
      "Epoch[15899/30000], loss: 0.007363\n",
      "Epoch[15919/30000], loss: 0.007327\n",
      "Epoch[15939/30000], loss: 0.007291\n",
      "Epoch[15959/30000], loss: 0.007256\n",
      "Epoch[15979/30000], loss: 0.007221\n",
      "Epoch[15999/30000], loss: 0.007186\n",
      "Epoch[16019/30000], loss: 0.007151\n",
      "Epoch[16039/30000], loss: 0.007116\n",
      "Epoch[16059/30000], loss: 0.007081\n",
      "Epoch[16079/30000], loss: 0.007047\n",
      "Epoch[16099/30000], loss: 0.007013\n",
      "Epoch[16119/30000], loss: 0.006978\n",
      "Epoch[16139/30000], loss: 0.006945\n",
      "Epoch[16159/30000], loss: 0.006911\n",
      "Epoch[16179/30000], loss: 0.006877\n",
      "Epoch[16199/30000], loss: 0.006844\n",
      "Epoch[16219/30000], loss: 0.006810\n",
      "Epoch[16239/30000], loss: 0.006777\n",
      "Epoch[16259/30000], loss: 0.006744\n",
      "Epoch[16279/30000], loss: 0.006712\n",
      "Epoch[16299/30000], loss: 0.006679\n",
      "Epoch[16319/30000], loss: 0.006647\n",
      "Epoch[16339/30000], loss: 0.006614\n",
      "Epoch[16359/30000], loss: 0.006582\n",
      "Epoch[16379/30000], loss: 0.006550\n",
      "Epoch[16399/30000], loss: 0.006518\n",
      "Epoch[16419/30000], loss: 0.006487\n",
      "Epoch[16439/30000], loss: 0.006455\n",
      "Epoch[16459/30000], loss: 0.006424\n",
      "Epoch[16479/30000], loss: 0.006392\n",
      "Epoch[16499/30000], loss: 0.006361\n",
      "Epoch[16519/30000], loss: 0.006330\n",
      "Epoch[16539/30000], loss: 0.006300\n",
      "Epoch[16559/30000], loss: 0.006269\n",
      "Epoch[16579/30000], loss: 0.006238\n",
      "Epoch[16599/30000], loss: 0.006208\n",
      "Epoch[16619/30000], loss: 0.006178\n",
      "Epoch[16639/30000], loss: 0.006148\n",
      "Epoch[16659/30000], loss: 0.006118\n",
      "Epoch[16679/30000], loss: 0.006088\n",
      "Epoch[16699/30000], loss: 0.006059\n",
      "Epoch[16719/30000], loss: 0.006029\n",
      "Epoch[16739/30000], loss: 0.006000\n",
      "Epoch[16759/30000], loss: 0.005971\n",
      "Epoch[16779/30000], loss: 0.005942\n",
      "Epoch[16799/30000], loss: 0.005913\n",
      "Epoch[16819/30000], loss: 0.005884\n",
      "Epoch[16839/30000], loss: 0.005855\n",
      "Epoch[16859/30000], loss: 0.005827\n",
      "Epoch[16879/30000], loss: 0.005799\n",
      "Epoch[16899/30000], loss: 0.005770\n",
      "Epoch[16919/30000], loss: 0.005742\n",
      "Epoch[16939/30000], loss: 0.005714\n",
      "Epoch[16959/30000], loss: 0.005687\n",
      "Epoch[16979/30000], loss: 0.005659\n",
      "Epoch[16999/30000], loss: 0.005631\n",
      "Epoch[17019/30000], loss: 0.005604\n",
      "Epoch[17039/30000], loss: 0.005577\n",
      "Epoch[17059/30000], loss: 0.005550\n",
      "Epoch[17079/30000], loss: 0.005523\n",
      "Epoch[17099/30000], loss: 0.005496\n",
      "Epoch[17119/30000], loss: 0.005469\n",
      "Epoch[17139/30000], loss: 0.005442\n",
      "Epoch[17159/30000], loss: 0.005416\n",
      "Epoch[17179/30000], loss: 0.005390\n",
      "Epoch[17199/30000], loss: 0.005363\n",
      "Epoch[17219/30000], loss: 0.005337\n",
      "Epoch[17239/30000], loss: 0.005311\n",
      "Epoch[17259/30000], loss: 0.005286\n",
      "Epoch[17279/30000], loss: 0.005260\n",
      "Epoch[17299/30000], loss: 0.005234\n",
      "Epoch[17319/30000], loss: 0.005209\n",
      "Epoch[17339/30000], loss: 0.005184\n",
      "Epoch[17359/30000], loss: 0.005158\n",
      "Epoch[17379/30000], loss: 0.005133\n",
      "Epoch[17399/30000], loss: 0.005108\n",
      "Epoch[17419/30000], loss: 0.005084\n",
      "Epoch[17439/30000], loss: 0.005059\n",
      "Epoch[17459/30000], loss: 0.005034\n",
      "Epoch[17479/30000], loss: 0.005010\n",
      "Epoch[17499/30000], loss: 0.004985\n",
      "Epoch[17519/30000], loss: 0.004961\n",
      "Epoch[17539/30000], loss: 0.004937\n",
      "Epoch[17559/30000], loss: 0.004913\n",
      "Epoch[17579/30000], loss: 0.004889\n",
      "Epoch[17599/30000], loss: 0.004865\n",
      "Epoch[17619/30000], loss: 0.004842\n",
      "Epoch[17639/30000], loss: 0.004818\n",
      "Epoch[17659/30000], loss: 0.004795\n",
      "Epoch[17679/30000], loss: 0.004771\n",
      "Epoch[17699/30000], loss: 0.004748\n",
      "Epoch[17719/30000], loss: 0.004725\n",
      "Epoch[17739/30000], loss: 0.004702\n",
      "Epoch[17759/30000], loss: 0.004679\n",
      "Epoch[17779/30000], loss: 0.004656\n",
      "Epoch[17799/30000], loss: 0.004634\n",
      "Epoch[17819/30000], loss: 0.004611\n",
      "Epoch[17839/30000], loss: 0.004589\n",
      "Epoch[17859/30000], loss: 0.004567\n",
      "Epoch[17879/30000], loss: 0.004544\n",
      "Epoch[17899/30000], loss: 0.004522\n",
      "Epoch[17919/30000], loss: 0.004500\n",
      "Epoch[17939/30000], loss: 0.004478\n",
      "Epoch[17959/30000], loss: 0.004457\n",
      "Epoch[17979/30000], loss: 0.004435\n",
      "Epoch[17999/30000], loss: 0.004413\n",
      "Epoch[18019/30000], loss: 0.004392\n",
      "Epoch[18039/30000], loss: 0.004371\n",
      "Epoch[18059/30000], loss: 0.004349\n",
      "Epoch[18079/30000], loss: 0.004328\n",
      "Epoch[18099/30000], loss: 0.004307\n",
      "Epoch[18119/30000], loss: 0.004286\n",
      "Epoch[18139/30000], loss: 0.004265\n",
      "Epoch[18159/30000], loss: 0.004245\n",
      "Epoch[18179/30000], loss: 0.004224\n",
      "Epoch[18199/30000], loss: 0.004203\n",
      "Epoch[18219/30000], loss: 0.004183\n",
      "Epoch[18239/30000], loss: 0.004163\n",
      "Epoch[18259/30000], loss: 0.004142\n",
      "Epoch[18279/30000], loss: 0.004122\n",
      "Epoch[18299/30000], loss: 0.004102\n",
      "Epoch[18319/30000], loss: 0.004082\n",
      "Epoch[18339/30000], loss: 0.004062\n",
      "Epoch[18359/30000], loss: 0.004043\n",
      "Epoch[18379/30000], loss: 0.004023\n",
      "Epoch[18399/30000], loss: 0.004003\n",
      "Epoch[18419/30000], loss: 0.003984\n",
      "Epoch[18439/30000], loss: 0.003965\n",
      "Epoch[18459/30000], loss: 0.003945\n",
      "Epoch[18479/30000], loss: 0.003926\n",
      "Epoch[18499/30000], loss: 0.003907\n",
      "Epoch[18519/30000], loss: 0.003888\n",
      "Epoch[18539/30000], loss: 0.003869\n",
      "Epoch[18559/30000], loss: 0.003850\n",
      "Epoch[18579/30000], loss: 0.003832\n",
      "Epoch[18599/30000], loss: 0.003813\n",
      "Epoch[18619/30000], loss: 0.003794\n",
      "Epoch[18639/30000], loss: 0.003776\n",
      "Epoch[18659/30000], loss: 0.003758\n",
      "Epoch[18679/30000], loss: 0.003739\n",
      "Epoch[18699/30000], loss: 0.003721\n",
      "Epoch[18719/30000], loss: 0.003703\n",
      "Epoch[18739/30000], loss: 0.003685\n",
      "Epoch[18759/30000], loss: 0.003667\n",
      "Epoch[18779/30000], loss: 0.003649\n",
      "Epoch[18799/30000], loss: 0.003632\n",
      "Epoch[18819/30000], loss: 0.003614\n",
      "Epoch[18839/30000], loss: 0.003596\n",
      "Epoch[18859/30000], loss: 0.003579\n",
      "Epoch[18879/30000], loss: 0.003561\n",
      "Epoch[18899/30000], loss: 0.003544\n",
      "Epoch[18919/30000], loss: 0.003527\n",
      "Epoch[18939/30000], loss: 0.003510\n",
      "Epoch[18959/30000], loss: 0.003493\n",
      "Epoch[18979/30000], loss: 0.003476\n",
      "Epoch[18999/30000], loss: 0.003459\n",
      "Epoch[19019/30000], loss: 0.003442\n",
      "Epoch[19039/30000], loss: 0.003425\n",
      "Epoch[19059/30000], loss: 0.003409\n",
      "Epoch[19079/30000], loss: 0.003392\n",
      "Epoch[19099/30000], loss: 0.003376\n",
      "Epoch[19119/30000], loss: 0.003359\n",
      "Epoch[19139/30000], loss: 0.003343\n",
      "Epoch[19159/30000], loss: 0.003327\n",
      "Epoch[19179/30000], loss: 0.003310\n",
      "Epoch[19199/30000], loss: 0.003294\n",
      "Epoch[19219/30000], loss: 0.003278\n",
      "Epoch[19239/30000], loss: 0.003262\n",
      "Epoch[19259/30000], loss: 0.003246\n",
      "Epoch[19279/30000], loss: 0.003231\n",
      "Epoch[19299/30000], loss: 0.003215\n",
      "Epoch[19319/30000], loss: 0.003199\n",
      "Epoch[19339/30000], loss: 0.003184\n",
      "Epoch[19359/30000], loss: 0.003168\n",
      "Epoch[19379/30000], loss: 0.003153\n",
      "Epoch[19399/30000], loss: 0.003138\n",
      "Epoch[19419/30000], loss: 0.003122\n",
      "Epoch[19439/30000], loss: 0.003107\n",
      "Epoch[19459/30000], loss: 0.003092\n",
      "Epoch[19479/30000], loss: 0.003077\n",
      "Epoch[19499/30000], loss: 0.003062\n",
      "Epoch[19519/30000], loss: 0.003047\n",
      "Epoch[19539/30000], loss: 0.003032\n",
      "Epoch[19559/30000], loss: 0.003018\n",
      "Epoch[19579/30000], loss: 0.003003\n",
      "Epoch[19599/30000], loss: 0.002988\n",
      "Epoch[19619/30000], loss: 0.002974\n",
      "Epoch[19639/30000], loss: 0.002959\n",
      "Epoch[19659/30000], loss: 0.002945\n",
      "Epoch[19679/30000], loss: 0.002931\n",
      "Epoch[19699/30000], loss: 0.002916\n",
      "Epoch[19719/30000], loss: 0.002902\n",
      "Epoch[19739/30000], loss: 0.002888\n",
      "Epoch[19759/30000], loss: 0.002874\n",
      "Epoch[19779/30000], loss: 0.002860\n",
      "Epoch[19799/30000], loss: 0.002846\n",
      "Epoch[19819/30000], loss: 0.002832\n",
      "Epoch[19839/30000], loss: 0.002818\n",
      "Epoch[19859/30000], loss: 0.002805\n",
      "Epoch[19879/30000], loss: 0.002791\n",
      "Epoch[19899/30000], loss: 0.002778\n",
      "Epoch[19919/30000], loss: 0.002764\n",
      "Epoch[19939/30000], loss: 0.002751\n",
      "Epoch[19959/30000], loss: 0.002737\n",
      "Epoch[19979/30000], loss: 0.002724\n",
      "Epoch[19999/30000], loss: 0.002711\n",
      "Epoch[20019/30000], loss: 0.002697\n",
      "Epoch[20039/30000], loss: 0.002684\n",
      "Epoch[20059/30000], loss: 0.002671\n",
      "Epoch[20079/30000], loss: 0.002658\n",
      "Epoch[20099/30000], loss: 0.002645\n",
      "Epoch[20119/30000], loss: 0.002633\n",
      "Epoch[20139/30000], loss: 0.002620\n",
      "Epoch[20159/30000], loss: 0.002607\n",
      "Epoch[20179/30000], loss: 0.002594\n",
      "Epoch[20199/30000], loss: 0.002582\n",
      "Epoch[20219/30000], loss: 0.002569\n",
      "Epoch[20239/30000], loss: 0.002557\n",
      "Epoch[20259/30000], loss: 0.002544\n",
      "Epoch[20279/30000], loss: 0.002532\n",
      "Epoch[20299/30000], loss: 0.002520\n",
      "Epoch[20319/30000], loss: 0.002507\n",
      "Epoch[20339/30000], loss: 0.002495\n",
      "Epoch[20359/30000], loss: 0.002483\n",
      "Epoch[20379/30000], loss: 0.002471\n",
      "Epoch[20399/30000], loss: 0.002459\n",
      "Epoch[20419/30000], loss: 0.002447\n",
      "Epoch[20439/30000], loss: 0.002435\n",
      "Epoch[20459/30000], loss: 0.002423\n",
      "Epoch[20479/30000], loss: 0.002411\n",
      "Epoch[20499/30000], loss: 0.002400\n",
      "Epoch[20519/30000], loss: 0.002388\n",
      "Epoch[20539/30000], loss: 0.002376\n",
      "Epoch[20559/30000], loss: 0.002365\n",
      "Epoch[20579/30000], loss: 0.002353\n",
      "Epoch[20599/30000], loss: 0.002342\n",
      "Epoch[20619/30000], loss: 0.002331\n",
      "Epoch[20639/30000], loss: 0.002319\n",
      "Epoch[20659/30000], loss: 0.002308\n",
      "Epoch[20679/30000], loss: 0.002297\n",
      "Epoch[20699/30000], loss: 0.002286\n",
      "Epoch[20719/30000], loss: 0.002274\n",
      "Epoch[20739/30000], loss: 0.002263\n",
      "Epoch[20759/30000], loss: 0.002252\n",
      "Epoch[20779/30000], loss: 0.002241\n",
      "Epoch[20799/30000], loss: 0.002231\n",
      "Epoch[20819/30000], loss: 0.002220\n",
      "Epoch[20839/30000], loss: 0.002209\n",
      "Epoch[20859/30000], loss: 0.002198\n",
      "Epoch[20879/30000], loss: 0.002187\n",
      "Epoch[20899/30000], loss: 0.002177\n",
      "Epoch[20919/30000], loss: 0.002166\n",
      "Epoch[20939/30000], loss: 0.002156\n",
      "Epoch[20959/30000], loss: 0.002145\n",
      "Epoch[20979/30000], loss: 0.002135\n",
      "Epoch[20999/30000], loss: 0.002124\n",
      "Epoch[21019/30000], loss: 0.002114\n",
      "Epoch[21039/30000], loss: 0.002104\n",
      "Epoch[21059/30000], loss: 0.002094\n",
      "Epoch[21079/30000], loss: 0.002083\n",
      "Epoch[21099/30000], loss: 0.002073\n",
      "Epoch[21119/30000], loss: 0.002063\n",
      "Epoch[21139/30000], loss: 0.002053\n",
      "Epoch[21159/30000], loss: 0.002043\n",
      "Epoch[21179/30000], loss: 0.002033\n",
      "Epoch[21199/30000], loss: 0.002023\n",
      "Epoch[21219/30000], loss: 0.002013\n",
      "Epoch[21239/30000], loss: 0.002004\n",
      "Epoch[21259/30000], loss: 0.001994\n",
      "Epoch[21279/30000], loss: 0.001984\n",
      "Epoch[21299/30000], loss: 0.001975\n",
      "Epoch[21319/30000], loss: 0.001965\n",
      "Epoch[21339/30000], loss: 0.001955\n",
      "Epoch[21359/30000], loss: 0.001946\n",
      "Epoch[21379/30000], loss: 0.001936\n",
      "Epoch[21399/30000], loss: 0.001927\n",
      "Epoch[21419/30000], loss: 0.001918\n",
      "Epoch[21439/30000], loss: 0.001908\n",
      "Epoch[21459/30000], loss: 0.001899\n",
      "Epoch[21479/30000], loss: 0.001890\n",
      "Epoch[21499/30000], loss: 0.001881\n",
      "Epoch[21519/30000], loss: 0.001871\n",
      "Epoch[21539/30000], loss: 0.001862\n",
      "Epoch[21559/30000], loss: 0.001853\n",
      "Epoch[21579/30000], loss: 0.001844\n",
      "Epoch[21599/30000], loss: 0.001835\n",
      "Epoch[21619/30000], loss: 0.001826\n",
      "Epoch[21639/30000], loss: 0.001818\n",
      "Epoch[21659/30000], loss: 0.001809\n",
      "Epoch[21679/30000], loss: 0.001800\n",
      "Epoch[21699/30000], loss: 0.001791\n",
      "Epoch[21719/30000], loss: 0.001782\n",
      "Epoch[21739/30000], loss: 0.001774\n",
      "Epoch[21759/30000], loss: 0.001765\n",
      "Epoch[21779/30000], loss: 0.001757\n",
      "Epoch[21799/30000], loss: 0.001748\n",
      "Epoch[21819/30000], loss: 0.001740\n",
      "Epoch[21839/30000], loss: 0.001731\n",
      "Epoch[21859/30000], loss: 0.001723\n",
      "Epoch[21879/30000], loss: 0.001714\n",
      "Epoch[21899/30000], loss: 0.001706\n",
      "Epoch[21919/30000], loss: 0.001698\n",
      "Epoch[21939/30000], loss: 0.001689\n",
      "Epoch[21959/30000], loss: 0.001681\n",
      "Epoch[21979/30000], loss: 0.001673\n",
      "Epoch[21999/30000], loss: 0.001665\n",
      "Epoch[22019/30000], loss: 0.001657\n",
      "Epoch[22039/30000], loss: 0.001649\n",
      "Epoch[22059/30000], loss: 0.001641\n",
      "Epoch[22079/30000], loss: 0.001633\n",
      "Epoch[22099/30000], loss: 0.001625\n",
      "Epoch[22119/30000], loss: 0.001617\n",
      "Epoch[22139/30000], loss: 0.001609\n",
      "Epoch[22159/30000], loss: 0.001601\n",
      "Epoch[22179/30000], loss: 0.001593\n",
      "Epoch[22199/30000], loss: 0.001586\n",
      "Epoch[22219/30000], loss: 0.001578\n",
      "Epoch[22239/30000], loss: 0.001570\n",
      "Epoch[22259/30000], loss: 0.001563\n",
      "Epoch[22279/30000], loss: 0.001555\n",
      "Epoch[22299/30000], loss: 0.001548\n",
      "Epoch[22319/30000], loss: 0.001540\n",
      "Epoch[22339/30000], loss: 0.001533\n",
      "Epoch[22359/30000], loss: 0.001525\n",
      "Epoch[22379/30000], loss: 0.001518\n",
      "Epoch[22399/30000], loss: 0.001510\n",
      "Epoch[22419/30000], loss: 0.001503\n",
      "Epoch[22439/30000], loss: 0.001496\n",
      "Epoch[22459/30000], loss: 0.001488\n",
      "Epoch[22479/30000], loss: 0.001481\n",
      "Epoch[22499/30000], loss: 0.001474\n",
      "Epoch[22519/30000], loss: 0.001467\n",
      "Epoch[22539/30000], loss: 0.001460\n",
      "Epoch[22559/30000], loss: 0.001453\n",
      "Epoch[22579/30000], loss: 0.001445\n",
      "Epoch[22599/30000], loss: 0.001438\n",
      "Epoch[22619/30000], loss: 0.001431\n",
      "Epoch[22639/30000], loss: 0.001424\n",
      "Epoch[22659/30000], loss: 0.001418\n",
      "Epoch[22679/30000], loss: 0.001411\n",
      "Epoch[22699/30000], loss: 0.001404\n",
      "Epoch[22719/30000], loss: 0.001397\n",
      "Epoch[22739/30000], loss: 0.001390\n",
      "Epoch[22759/30000], loss: 0.001383\n",
      "Epoch[22779/30000], loss: 0.001377\n",
      "Epoch[22799/30000], loss: 0.001370\n",
      "Epoch[22819/30000], loss: 0.001363\n",
      "Epoch[22839/30000], loss: 0.001357\n",
      "Epoch[22859/30000], loss: 0.001350\n",
      "Epoch[22879/30000], loss: 0.001344\n",
      "Epoch[22899/30000], loss: 0.001337\n",
      "Epoch[22919/30000], loss: 0.001331\n",
      "Epoch[22939/30000], loss: 0.001324\n",
      "Epoch[22959/30000], loss: 0.001318\n",
      "Epoch[22979/30000], loss: 0.001311\n",
      "Epoch[22999/30000], loss: 0.001305\n",
      "Epoch[23019/30000], loss: 0.001298\n",
      "Epoch[23039/30000], loss: 0.001292\n",
      "Epoch[23059/30000], loss: 0.001286\n",
      "Epoch[23079/30000], loss: 0.001280\n",
      "Epoch[23099/30000], loss: 0.001273\n",
      "Epoch[23119/30000], loss: 0.001267\n",
      "Epoch[23139/30000], loss: 0.001261\n",
      "Epoch[23159/30000], loss: 0.001255\n",
      "Epoch[23179/30000], loss: 0.001249\n",
      "Epoch[23199/30000], loss: 0.001243\n",
      "Epoch[23219/30000], loss: 0.001237\n",
      "Epoch[23239/30000], loss: 0.001231\n",
      "Epoch[23259/30000], loss: 0.001225\n",
      "Epoch[23279/30000], loss: 0.001219\n",
      "Epoch[23299/30000], loss: 0.001213\n",
      "Epoch[23319/30000], loss: 0.001207\n",
      "Epoch[23339/30000], loss: 0.001201\n",
      "Epoch[23359/30000], loss: 0.001195\n",
      "Epoch[23379/30000], loss: 0.001189\n",
      "Epoch[23399/30000], loss: 0.001184\n",
      "Epoch[23419/30000], loss: 0.001178\n",
      "Epoch[23439/30000], loss: 0.001172\n",
      "Epoch[23459/30000], loss: 0.001166\n",
      "Epoch[23479/30000], loss: 0.001161\n",
      "Epoch[23499/30000], loss: 0.001155\n",
      "Epoch[23519/30000], loss: 0.001150\n",
      "Epoch[23539/30000], loss: 0.001144\n",
      "Epoch[23559/30000], loss: 0.001138\n",
      "Epoch[23579/30000], loss: 0.001133\n",
      "Epoch[23599/30000], loss: 0.001127\n",
      "Epoch[23619/30000], loss: 0.001122\n",
      "Epoch[23639/30000], loss: 0.001116\n",
      "Epoch[23659/30000], loss: 0.001111\n",
      "Epoch[23679/30000], loss: 0.001106\n",
      "Epoch[23699/30000], loss: 0.001100\n",
      "Epoch[23719/30000], loss: 0.001095\n",
      "Epoch[23739/30000], loss: 0.001089\n",
      "Epoch[23759/30000], loss: 0.001084\n",
      "Epoch[23779/30000], loss: 0.001079\n",
      "Epoch[23799/30000], loss: 0.001074\n",
      "Epoch[23819/30000], loss: 0.001068\n",
      "Epoch[23839/30000], loss: 0.001063\n",
      "Epoch[23859/30000], loss: 0.001058\n",
      "Epoch[23879/30000], loss: 0.001053\n",
      "Epoch[23899/30000], loss: 0.001048\n",
      "Epoch[23919/30000], loss: 0.001043\n",
      "Epoch[23939/30000], loss: 0.001038\n",
      "Epoch[23959/30000], loss: 0.001033\n",
      "Epoch[23979/30000], loss: 0.001028\n",
      "Epoch[23999/30000], loss: 0.001023\n",
      "Epoch[24019/30000], loss: 0.001018\n",
      "Epoch[24039/30000], loss: 0.001013\n",
      "Epoch[24059/30000], loss: 0.001008\n",
      "Epoch[24079/30000], loss: 0.001003\n",
      "Epoch[24099/30000], loss: 0.000998\n",
      "Epoch[24119/30000], loss: 0.000993\n",
      "Epoch[24139/30000], loss: 0.000988\n",
      "Epoch[24159/30000], loss: 0.000983\n",
      "Epoch[24179/30000], loss: 0.000979\n",
      "Epoch[24199/30000], loss: 0.000974\n",
      "Epoch[24219/30000], loss: 0.000969\n",
      "Epoch[24239/30000], loss: 0.000965\n",
      "Epoch[24259/30000], loss: 0.000960\n",
      "Epoch[24279/30000], loss: 0.000955\n",
      "Epoch[24299/30000], loss: 0.000951\n",
      "Epoch[24319/30000], loss: 0.000946\n",
      "Epoch[24339/30000], loss: 0.000941\n",
      "Epoch[24359/30000], loss: 0.000937\n",
      "Epoch[24379/30000], loss: 0.000932\n",
      "Epoch[24399/30000], loss: 0.000928\n",
      "Epoch[24419/30000], loss: 0.000923\n",
      "Epoch[24439/30000], loss: 0.000919\n",
      "Epoch[24459/30000], loss: 0.000914\n",
      "Epoch[24479/30000], loss: 0.000910\n",
      "Epoch[24499/30000], loss: 0.000905\n",
      "Epoch[24519/30000], loss: 0.000901\n",
      "Epoch[24539/30000], loss: 0.000897\n",
      "Epoch[24559/30000], loss: 0.000892\n",
      "Epoch[24579/30000], loss: 0.000888\n",
      "Epoch[24599/30000], loss: 0.000883\n",
      "Epoch[24619/30000], loss: 0.000879\n",
      "Epoch[24639/30000], loss: 0.000875\n",
      "Epoch[24659/30000], loss: 0.000871\n",
      "Epoch[24679/30000], loss: 0.000866\n",
      "Epoch[24699/30000], loss: 0.000862\n",
      "Epoch[24719/30000], loss: 0.000858\n",
      "Epoch[24739/30000], loss: 0.000854\n",
      "Epoch[24759/30000], loss: 0.000850\n",
      "Epoch[24779/30000], loss: 0.000846\n",
      "Epoch[24799/30000], loss: 0.000841\n",
      "Epoch[24819/30000], loss: 0.000837\n",
      "Epoch[24839/30000], loss: 0.000833\n",
      "Epoch[24859/30000], loss: 0.000829\n",
      "Epoch[24879/30000], loss: 0.000825\n",
      "Epoch[24899/30000], loss: 0.000821\n",
      "Epoch[24919/30000], loss: 0.000817\n",
      "Epoch[24939/30000], loss: 0.000813\n",
      "Epoch[24959/30000], loss: 0.000809\n",
      "Epoch[24979/30000], loss: 0.000805\n",
      "Epoch[24999/30000], loss: 0.000801\n",
      "Epoch[25019/30000], loss: 0.000798\n",
      "Epoch[25039/30000], loss: 0.000794\n",
      "Epoch[25059/30000], loss: 0.000790\n",
      "Epoch[25079/30000], loss: 0.000786\n",
      "Epoch[25099/30000], loss: 0.000782\n",
      "Epoch[25119/30000], loss: 0.000778\n",
      "Epoch[25139/30000], loss: 0.000775\n",
      "Epoch[25159/30000], loss: 0.000771\n",
      "Epoch[25179/30000], loss: 0.000767\n",
      "Epoch[25199/30000], loss: 0.000763\n",
      "Epoch[25219/30000], loss: 0.000760\n",
      "Epoch[25239/30000], loss: 0.000756\n",
      "Epoch[25259/30000], loss: 0.000752\n",
      "Epoch[25279/30000], loss: 0.000749\n",
      "Epoch[25299/30000], loss: 0.000745\n",
      "Epoch[25319/30000], loss: 0.000741\n",
      "Epoch[25339/30000], loss: 0.000738\n",
      "Epoch[25359/30000], loss: 0.000734\n",
      "Epoch[25379/30000], loss: 0.000731\n",
      "Epoch[25399/30000], loss: 0.000727\n",
      "Epoch[25419/30000], loss: 0.000723\n",
      "Epoch[25439/30000], loss: 0.000720\n",
      "Epoch[25459/30000], loss: 0.000716\n",
      "Epoch[25479/30000], loss: 0.000713\n",
      "Epoch[25499/30000], loss: 0.000710\n",
      "Epoch[25519/30000], loss: 0.000706\n",
      "Epoch[25539/30000], loss: 0.000703\n",
      "Epoch[25559/30000], loss: 0.000699\n",
      "Epoch[25579/30000], loss: 0.000696\n",
      "Epoch[25599/30000], loss: 0.000692\n",
      "Epoch[25619/30000], loss: 0.000689\n",
      "Epoch[25639/30000], loss: 0.000686\n",
      "Epoch[25659/30000], loss: 0.000682\n",
      "Epoch[25679/30000], loss: 0.000679\n",
      "Epoch[25699/30000], loss: 0.000676\n",
      "Epoch[25719/30000], loss: 0.000672\n",
      "Epoch[25739/30000], loss: 0.000669\n",
      "Epoch[25759/30000], loss: 0.000666\n",
      "Epoch[25779/30000], loss: 0.000663\n",
      "Epoch[25799/30000], loss: 0.000660\n",
      "Epoch[25819/30000], loss: 0.000656\n",
      "Epoch[25839/30000], loss: 0.000653\n",
      "Epoch[25859/30000], loss: 0.000650\n",
      "Epoch[25879/30000], loss: 0.000647\n",
      "Epoch[25899/30000], loss: 0.000644\n",
      "Epoch[25919/30000], loss: 0.000640\n",
      "Epoch[25939/30000], loss: 0.000637\n",
      "Epoch[25959/30000], loss: 0.000634\n",
      "Epoch[25979/30000], loss: 0.000631\n",
      "Epoch[25999/30000], loss: 0.000628\n",
      "Epoch[26019/30000], loss: 0.000625\n",
      "Epoch[26039/30000], loss: 0.000622\n",
      "Epoch[26059/30000], loss: 0.000619\n",
      "Epoch[26079/30000], loss: 0.000616\n",
      "Epoch[26099/30000], loss: 0.000613\n",
      "Epoch[26119/30000], loss: 0.000610\n",
      "Epoch[26139/30000], loss: 0.000607\n",
      "Epoch[26159/30000], loss: 0.000604\n",
      "Epoch[26179/30000], loss: 0.000601\n",
      "Epoch[26199/30000], loss: 0.000598\n",
      "Epoch[26219/30000], loss: 0.000595\n",
      "Epoch[26239/30000], loss: 0.000592\n",
      "Epoch[26259/30000], loss: 0.000590\n",
      "Epoch[26279/30000], loss: 0.000587\n",
      "Epoch[26299/30000], loss: 0.000584\n",
      "Epoch[26319/30000], loss: 0.000581\n",
      "Epoch[26339/30000], loss: 0.000578\n",
      "Epoch[26359/30000], loss: 0.000575\n",
      "Epoch[26379/30000], loss: 0.000573\n",
      "Epoch[26399/30000], loss: 0.000570\n",
      "Epoch[26419/30000], loss: 0.000567\n",
      "Epoch[26439/30000], loss: 0.000564\n",
      "Epoch[26459/30000], loss: 0.000561\n",
      "Epoch[26479/30000], loss: 0.000559\n",
      "Epoch[26499/30000], loss: 0.000556\n",
      "Epoch[26519/30000], loss: 0.000553\n",
      "Epoch[26539/30000], loss: 0.000551\n",
      "Epoch[26559/30000], loss: 0.000548\n",
      "Epoch[26579/30000], loss: 0.000545\n",
      "Epoch[26599/30000], loss: 0.000543\n",
      "Epoch[26619/30000], loss: 0.000540\n",
      "Epoch[26639/30000], loss: 0.000537\n",
      "Epoch[26659/30000], loss: 0.000535\n",
      "Epoch[26679/30000], loss: 0.000532\n",
      "Epoch[26699/30000], loss: 0.000530\n",
      "Epoch[26719/30000], loss: 0.000527\n",
      "Epoch[26739/30000], loss: 0.000524\n",
      "Epoch[26759/30000], loss: 0.000522\n",
      "Epoch[26779/30000], loss: 0.000519\n",
      "Epoch[26799/30000], loss: 0.000517\n",
      "Epoch[26819/30000], loss: 0.000514\n",
      "Epoch[26839/30000], loss: 0.000512\n",
      "Epoch[26859/30000], loss: 0.000509\n",
      "Epoch[26879/30000], loss: 0.000507\n",
      "Epoch[26899/30000], loss: 0.000504\n",
      "Epoch[26919/30000], loss: 0.000502\n",
      "Epoch[26939/30000], loss: 0.000500\n",
      "Epoch[26959/30000], loss: 0.000497\n",
      "Epoch[26979/30000], loss: 0.000495\n",
      "Epoch[26999/30000], loss: 0.000492\n",
      "Epoch[27019/30000], loss: 0.000490\n",
      "Epoch[27039/30000], loss: 0.000487\n",
      "Epoch[27059/30000], loss: 0.000485\n",
      "Epoch[27079/30000], loss: 0.000483\n",
      "Epoch[27099/30000], loss: 0.000480\n",
      "Epoch[27119/30000], loss: 0.000478\n",
      "Epoch[27139/30000], loss: 0.000476\n",
      "Epoch[27159/30000], loss: 0.000473\n",
      "Epoch[27179/30000], loss: 0.000471\n",
      "Epoch[27199/30000], loss: 0.000469\n",
      "Epoch[27219/30000], loss: 0.000467\n",
      "Epoch[27239/30000], loss: 0.000464\n",
      "Epoch[27259/30000], loss: 0.000462\n",
      "Epoch[27279/30000], loss: 0.000460\n",
      "Epoch[27299/30000], loss: 0.000458\n",
      "Epoch[27319/30000], loss: 0.000455\n",
      "Epoch[27339/30000], loss: 0.000453\n",
      "Epoch[27359/30000], loss: 0.000451\n",
      "Epoch[27379/30000], loss: 0.000449\n",
      "Epoch[27399/30000], loss: 0.000447\n",
      "Epoch[27419/30000], loss: 0.000444\n",
      "Epoch[27439/30000], loss: 0.000442\n",
      "Epoch[27459/30000], loss: 0.000440\n",
      "Epoch[27479/30000], loss: 0.000438\n",
      "Epoch[27499/30000], loss: 0.000436\n",
      "Epoch[27519/30000], loss: 0.000434\n",
      "Epoch[27539/30000], loss: 0.000432\n",
      "Epoch[27559/30000], loss: 0.000430\n",
      "Epoch[27579/30000], loss: 0.000427\n",
      "Epoch[27599/30000], loss: 0.000425\n",
      "Epoch[27619/30000], loss: 0.000423\n",
      "Epoch[27639/30000], loss: 0.000421\n",
      "Epoch[27659/30000], loss: 0.000419\n",
      "Epoch[27679/30000], loss: 0.000417\n",
      "Epoch[27699/30000], loss: 0.000415\n",
      "Epoch[27719/30000], loss: 0.000413\n",
      "Epoch[27739/30000], loss: 0.000411\n",
      "Epoch[27759/30000], loss: 0.000409\n",
      "Epoch[27779/30000], loss: 0.000407\n",
      "Epoch[27799/30000], loss: 0.000405\n",
      "Epoch[27819/30000], loss: 0.000403\n",
      "Epoch[27839/30000], loss: 0.000401\n",
      "Epoch[27859/30000], loss: 0.000399\n",
      "Epoch[27879/30000], loss: 0.000397\n",
      "Epoch[27899/30000], loss: 0.000395\n",
      "Epoch[27919/30000], loss: 0.000393\n",
      "Epoch[27939/30000], loss: 0.000392\n",
      "Epoch[27959/30000], loss: 0.000390\n",
      "Epoch[27979/30000], loss: 0.000388\n",
      "Epoch[27999/30000], loss: 0.000386\n",
      "Epoch[28019/30000], loss: 0.000384\n",
      "Epoch[28039/30000], loss: 0.000382\n",
      "Epoch[28059/30000], loss: 0.000380\n",
      "Epoch[28079/30000], loss: 0.000378\n",
      "Epoch[28099/30000], loss: 0.000377\n",
      "Epoch[28119/30000], loss: 0.000375\n",
      "Epoch[28139/30000], loss: 0.000373\n",
      "Epoch[28159/30000], loss: 0.000371\n",
      "Epoch[28179/30000], loss: 0.000369\n",
      "Epoch[28199/30000], loss: 0.000367\n",
      "Epoch[28219/30000], loss: 0.000366\n",
      "Epoch[28239/30000], loss: 0.000364\n",
      "Epoch[28259/30000], loss: 0.000362\n",
      "Epoch[28279/30000], loss: 0.000360\n",
      "Epoch[28299/30000], loss: 0.000359\n",
      "Epoch[28319/30000], loss: 0.000357\n",
      "Epoch[28339/30000], loss: 0.000355\n",
      "Epoch[28359/30000], loss: 0.000353\n",
      "Epoch[28379/30000], loss: 0.000352\n",
      "Epoch[28399/30000], loss: 0.000350\n",
      "Epoch[28419/30000], loss: 0.000348\n",
      "Epoch[28439/30000], loss: 0.000347\n",
      "Epoch[28459/30000], loss: 0.000345\n",
      "Epoch[28479/30000], loss: 0.000343\n",
      "Epoch[28499/30000], loss: 0.000342\n",
      "Epoch[28519/30000], loss: 0.000340\n",
      "Epoch[28539/30000], loss: 0.000338\n",
      "Epoch[28559/30000], loss: 0.000337\n",
      "Epoch[28579/30000], loss: 0.000335\n",
      "Epoch[28599/30000], loss: 0.000333\n",
      "Epoch[28619/30000], loss: 0.000332\n",
      "Epoch[28639/30000], loss: 0.000330\n",
      "Epoch[28659/30000], loss: 0.000329\n",
      "Epoch[28679/30000], loss: 0.000327\n",
      "Epoch[28699/30000], loss: 0.000325\n",
      "Epoch[28719/30000], loss: 0.000324\n",
      "Epoch[28739/30000], loss: 0.000322\n",
      "Epoch[28759/30000], loss: 0.000321\n",
      "Epoch[28779/30000], loss: 0.000319\n",
      "Epoch[28799/30000], loss: 0.000318\n",
      "Epoch[28819/30000], loss: 0.000316\n",
      "Epoch[28839/30000], loss: 0.000314\n",
      "Epoch[28859/30000], loss: 0.000313\n",
      "Epoch[28879/30000], loss: 0.000311\n",
      "Epoch[28899/30000], loss: 0.000310\n",
      "Epoch[28919/30000], loss: 0.000308\n",
      "Epoch[28939/30000], loss: 0.000307\n",
      "Epoch[28959/30000], loss: 0.000305\n",
      "Epoch[28979/30000], loss: 0.000304\n",
      "Epoch[28999/30000], loss: 0.000302\n",
      "Epoch[29019/30000], loss: 0.000301\n",
      "Epoch[29039/30000], loss: 0.000299\n",
      "Epoch[29059/30000], loss: 0.000298\n",
      "Epoch[29079/30000], loss: 0.000297\n",
      "Epoch[29099/30000], loss: 0.000295\n",
      "Epoch[29119/30000], loss: 0.000294\n",
      "Epoch[29139/30000], loss: 0.000292\n",
      "Epoch[29159/30000], loss: 0.000291\n",
      "Epoch[29179/30000], loss: 0.000289\n",
      "Epoch[29199/30000], loss: 0.000288\n",
      "Epoch[29219/30000], loss: 0.000287\n",
      "Epoch[29239/30000], loss: 0.000285\n",
      "Epoch[29259/30000], loss: 0.000284\n",
      "Epoch[29279/30000], loss: 0.000282\n",
      "Epoch[29299/30000], loss: 0.000281\n",
      "Epoch[29319/30000], loss: 0.000280\n",
      "Epoch[29339/30000], loss: 0.000278\n",
      "Epoch[29359/30000], loss: 0.000277\n",
      "Epoch[29379/30000], loss: 0.000276\n",
      "Epoch[29399/30000], loss: 0.000274\n",
      "Epoch[29419/30000], loss: 0.000273\n",
      "Epoch[29439/30000], loss: 0.000272\n",
      "Epoch[29459/30000], loss: 0.000270\n",
      "Epoch[29479/30000], loss: 0.000269\n",
      "Epoch[29499/30000], loss: 0.000268\n",
      "Epoch[29519/30000], loss: 0.000266\n",
      "Epoch[29539/30000], loss: 0.000265\n",
      "Epoch[29559/30000], loss: 0.000264\n",
      "Epoch[29579/30000], loss: 0.000263\n",
      "Epoch[29599/30000], loss: 0.000261\n",
      "Epoch[29619/30000], loss: 0.000260\n",
      "Epoch[29639/30000], loss: 0.000259\n",
      "Epoch[29659/30000], loss: 0.000257\n",
      "Epoch[29679/30000], loss: 0.000256\n",
      "Epoch[29699/30000], loss: 0.000255\n",
      "Epoch[29719/30000], loss: 0.000254\n",
      "Epoch[29739/30000], loss: 0.000253\n",
      "Epoch[29759/30000], loss: 0.000251\n",
      "Epoch[29779/30000], loss: 0.000250\n",
      "Epoch[29799/30000], loss: 0.000249\n",
      "Epoch[29819/30000], loss: 0.000248\n",
      "Epoch[29839/30000], loss: 0.000246\n",
      "Epoch[29859/30000], loss: 0.000245\n",
      "Epoch[29879/30000], loss: 0.000244\n",
      "Epoch[29899/30000], loss: 0.000243\n",
      "Epoch[29919/30000], loss: 0.000242\n",
      "Epoch[29939/30000], loss: 0.000240\n",
      "Epoch[29959/30000], loss: 0.000239\n",
      "Epoch[29979/30000], loss: 0.000238\n",
      "Epoch[29999/30000], loss: 0.000237\n"
     ]
    },
    {
     "data": {
      "text/plain": "<Figure size 432x288 with 1 Axes>",
      "image/png": "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\n"
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "import torch\n",
    "from torch import nn\n",
    "from torch import optim\n",
    "import numpy as np\n",
    "from matplotlib import pyplot as plt\n",
    "\n",
    "# 1. 定义数据\n",
    "x = torch.rand([50, 1])\n",
    "y = x * 3 + 0.8\n",
    "print(x)\n",
    "print(x.size())\n",
    "\n",
    "\n",
    "#2 .定义模型\n",
    "class Lr(nn.Module):\n",
    "    def __init__(self):\n",
    "        super(Lr, self).__init__()\n",
    "        self.linear = nn.Linear(1, 1)\n",
    "\n",
    "    def forward(self, x):\n",
    "        out = self.linear(x)\n",
    "        return out\n",
    "\n",
    "\n",
    "# 2. 实例化模型，loss，和优化器\n",
    "model = Lr()\n",
    "criterion = nn.MSELoss()\n",
    "optimizer = optim.SGD(model.parameters(), lr=1e-3)\n",
    "#3. 训练模型\n",
    "for i in range(30000):\n",
    "    out = model(x)  #3.1 获取预测值\n",
    "    loss = criterion(y, out)  #3.2 计算损失\n",
    "    optimizer.zero_grad()  #3.3 梯度归零\n",
    "    loss.backward()  #3.4 计算梯度\n",
    "    optimizer.step()  # 3.5 更新梯度\n",
    "    if (i + 1) % 20 == 0:\n",
    "        print('Epoch[{}/{}], loss: {:.6f}'.format(i, 30000, loss.data))\n",
    "\n",
    "#4. 模型评估\n",
    "model.eval()  #设置模型为评估模式，即预测模式\n",
    "predict = model(x)\n",
    "predict = predict.data.numpy()\n",
    "plt.scatter(x.data.numpy(), y.data.numpy(), c=\"r\")\n",
    "plt.plot(x.data.numpy(), predict)\n",
    "plt.show()"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 0
}